public void FlyweightTest() { // The client code usually creates a bunch of pre-populated // flyweights in the initialization stage of the application. var factory = new FlyweightFactory( new Car { Company = "Chevrolet", Model = "Camaro2018", Color = "pink" }, new Car { Company = "Mercedes Benz", Model = "C300", Color = "black" }, new Car { Company = "Mercedes Benz", Model = "C500", Color = "red" }, new Car { Company = "BMW", Model = "M5", Color = "red" }, new Car { Company = "BMW", Model = "X6", Color = "white" } ); factory.ListFlyweights().Count().Should().Be(5); AddCarToPoliceDatabase(factory, new Car { Number = "CL234IR", Owner = "James Doe", Company = "BMW", Model = "M5", Color = "red" }); AddCarToPoliceDatabase(factory, new Car { Number = "CL234IR", Owner = "James Doe", Company = "BMW", Model = "X1", Color = "red" }); factory.ListFlyweights().Count().Should().Be(6); }
public static void Run() { var factory = new FlyweightFactory( new Car { Company = "Chevrolet", Model = "Camaro2018", Color = "pink" }, new Car { Company = "Mercedes Benz", Model = "C300", Color = "black" }, new Car { Company = "Mercedes Benz", Model = "C500", Color = "red" }, new Car { Company = "BMW", Model = "M5", Color = "red" }, new Car { Company = "BMW", Model = "X6", Color = "white" } ); factory.ListFlyweights(); System.Console.WriteLine("Client: adding a car to database"); var car = new Car() { Number = "CL234IR", Owner = "James Doe", Company = "BMW", Model = "M5", Color = "red" }; var flyweight = factory.GetFlyweight(car); flyweight.Execute(car); var newCar = new Car() { Number = "CL234IR", Owner = "James Doe", Company = "BMW", }; Context context = new Context(factory, car, newCar); context.Execute(); }
public void Use_Intrinsic_And_Extrinsic_States() { // The client code usually creates a bunch of pre-populated // flyweights in the initialization stage of the application var factory = new FlyweightFactory( new Car { Company = "Chevrolet", Model = "Camaro2018", Color = "pink" }, new Car { Company = "Mercedes Benz", Model = "C300", Color = "black" }, new Car { Company = "Mercedes Benz", Model = "C500", Color = "red" }, new Car { Company = "BMW", Model = "M5", Color = "red" }, new Car { Company = "BMW", Model = "X6", Color = "white" } ); Assert.Equal("Camaro2018_Chevrolet_pink\nblack_C300_Mercedes Benz\nC500_Mercedes Benz_red\nBMW_M5_red\nBMW_white_X6", factory.ListFlyweights()); Assert.Equal( "Flyweight: Displaying shared {\"Owner\":null,\"Number\":null,\"Company\":\"BMW\",\"Model\":\"M5\",\"Color\":\"red\"} and unique {\"Owner\":\"James Doe\",\"Number\":\"CL234IR\",\"Company\":\"BMW\",\"Model\":\"M5\",\"Color\":\"red\"} state.", AddCarToPoliceDatabase(factory, new Car { Number = "CL234IR", Owner = "James Doe", Company = "BMW", Model = "M5", Color = "red" })); Assert.Equal( "Flyweight: Displaying shared {\"Owner\":null,\"Number\":null,\"Company\":\"BMW\",\"Model\":\"X1\",\"Color\":\"red\"} and unique {\"Owner\":\"James Doe\",\"Number\":\"CL234IR\",\"Company\":\"BMW\",\"Model\":\"X1\",\"Color\":\"red\"} state.", AddCarToPoliceDatabase(factory, new Car { Number = "CL234IR", Owner = "James Doe", Company = "BMW", Model = "X1", Color = "red" })); Assert.Equal("Camaro2018_Chevrolet_pink\nblack_C300_Mercedes Benz\nC500_Mercedes Benz_red\nBMW_M5_red\nBMW_white_X6\nBMW_red_X1", factory.ListFlyweights()); }