public static void Test() { var director = new Director(); director.Construct(new ConcreteBuilder1()); director.Construct(new ConcreteBuilder2()); }
public Client() { Director director = new Director(); Builder b1 = new ConcreteBuilder1(); Builder b2 = new ConcreteBuilder2(); director.Construct(b1); Product p1 = b1.GetResult(); p1.Show(); director.Construct(b2); Product p2 = b2.GetResult(); p2.Show(); }
void UnitTest() { // 建立 Director theDirectoir = new Director(); Product theProduct = null; // 使用BuilderA建立 theDirectoir.Construct( new ConcreteBuilderA()); theProduct = theDirectoir.GetResult(); theProduct.ShowProduct(); // 使用BuilderB建立 theDirectoir.Construct( new ConcreteBuilderB()); theProduct = theDirectoir.GetResult(); theProduct.ShowProduct(); }
public static void Main() { // Create director and builders Director director = new Director(); Builder b1 = new ConcreteBuilder1(); Builder b2 = new ConcreteBuilder2(); // Construct two products director.Construct(b1); Product p1 = b1.GetResult(); p1.Show(); director.Construct(b2); Product p2 = b2.GetResult(); p2.Show(); // Wait for user Console.Read(); }
static void Main(string[] args) { //house building Builder.Builder b = new ConcreteBuilder(); Foreman f = new Foreman(b); f.Construct(); House h = b.GetResult(); //bottle building BottleBuilder.BottleBuilder bb = new PepsiBottleBuilder(); Director d = new Director(bb); d.Construct(); Bottle bottle = bb.GetBottle(); }
public void ConstructTest() { var log = A.Fake<ILog>(); var dataBuilder = A.Fake<IDataBuilder>(); var director = new Director(log); director.Construct(new List<IDataBuilder> { dataBuilder }); A.CallTo(() => dataBuilder.CreateStructure()).MustHaveHappened(); A.CallTo(() => dataBuilder.ValidateStructure()).MustHaveHappened(); A.CallTo(() => dataBuilder.WriteStructure()).MustHaveHappened(); }
private Task <IPagedList <ShortBookDto> > GetAll(AllBookInput input, BuilderSortBase <Book> builder) { return(Task.Run(() => { builder .SortingBy(input.SortType) .OrderBy(input.OrderIsDescending); var books = Director <Book> .Construct(builder) .ToPagedList(input.PageIndex, input.PageSize) .MapTo <IPagedList <ShortBookDto> >(); return books; })); }
static void TestSample1() { var director = new Director(); var builders = new List <Builder> { new ConcreteBuilderA(), new ConcreteBuilderB() }; var products = new List <Product>(); builders.ForEach((builder) => { director.Construct(builder); products.Add(builder.GetResult()); }); products.ForEach((product) => { product.ShowParts(); }); }
/// <summary> /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// </summary> protected override void Initialize() { // TODO: Add your initialization logic here IsMouseVisible = true; Director director = new Director(new PlayerBuilder()); gameObjects.Add(director.Construct()); for (int i = 0; i < gameObjects.Count; i++) { gameObjects[i].Awake(); } base.Initialize(); }
public void Execute(List <ICommand> ts, List <int> Unit) { Director director = new Director(); //строительство дерева IBuilder b1 = new BuildTree(Unit); director.Construct(b1); Product _product = new Product(b1.GetResult()); Console.WriteLine(_product.ToString()); ts.Add(new Print()); FileStream FileWriter = new FileStream(@"Result.txt", FileMode.Create); byte[] array = System.Text.Encoding.Default.GetBytes("Обход в глубину:" + _product.ToString()); FileWriter.Write(array, 0, array.Length); }
public void CreateProductWithBuilder1() { // Create concrete builder No 1 Builder builder = new ConcreteBuilder1(); // Create concrete builder No 2 //BuilderTest.Builder builder = new BuilderTest.ConcreteBuilder2(); // Configure Director with builder Director director = new Director(builder); // Construct Product from Director director.Construct(); // Get result Product product = builder.GetResult(); Assert.AreEqual(product.ToString(), "Hello World"); }
public static void Main(string[] args) { if (args[0].Equals("plain")) { TextBuilder textBuilder = new TextBuilder(); Director director = new Director(textBuilder); director.Construct(); System.Console.WriteLine(textBuilder.GetResult()); } if (args[0].Equals("html")) { HtmlBuilder htmlBuilder = new HtmlBuilder(); Director director = new Director(htmlBuilder); director.Construct(); System.Console.WriteLine(htmlBuilder.GetResult()); } }
static void Main(string[] args) { IBuilder builder = new ConcreteBuilder(); Director director = new Director(builder); director.Construct(); Product product = builder.GetResult(); product.Show(); /* * IBuilder b = new ConcreteBuilder(); * b.BuildPartA(); * b.BuildPartB(); * Product p = b.GetResult(); * p.Show(); */ }
public void ConstructTest03() { // 创建指挥者和构造者 Director director = new Director(); BaseBuilder builder = new ConcreteBuilderC(); // 组装电脑 director.Construct(builder); // 组装完毕 var computer = builder.GetComputer(); // 组装清单 var list = computer.Parts; // 验证 Assert.AreEqual("组件CPU安装完毕", list[0]); Assert.AreEqual("组件主板安装完毕", list[1]); Assert.AreEqual("组件高性能显卡安装完毕", list[2]); Assert.AreEqual("组件高性能声卡安装完毕", list[3]); }
static void Main(string[] args) { Builder builder = new SH_ControlPanel(); Director director = new Director(builder); director.Construct(); SmartHouse SH = builder.GetSmartHouse(); Console.WriteLine(SH.ToString()); builder = new SH_RemoteController(); director = new Director(builder); director.Construct(); SH = builder.GetSmartHouse(); Console.WriteLine(SH.ToString()); builder = new SH_MobileDevices(); director = new Director(builder); director.Construct(); SH = builder.GetSmartHouse(); Console.WriteLine(SH.ToString()); }
private Chunk ConstructChunk(Vector2Int coords) { Director director = null; switch (Random.Range(0, 2)) { case 0: director = _roomDirector; break; case 1: director = _tunnelDirector; break; default: director = _roomDirector; break; } director.Construct(ChunkBuilder.Instance); Chunk chunk = ChunkBuilder.Instance.GetResult(); var transform1 = chunk.transform; transform1.parent = transform; transform1.localPosition = new Vector3(coords.x * 10, coords.y * 10, -1); return(chunk); }
public virtual async Task StartListener() { while (true) { TcpClient client = server.AcceptTcpClient(); while (true) { await Task.Delay(2); if (client.GetStream().CanRead&& client.Available >= 8) { //byte[] buffer = new byte[client.Available]; var dir = new Director(); var build = new PlayerBuilder(); dir.Construct(build, client); //client.GetStream().Read(buffer, 0, client.Available); //int userId = BitConverter.ToInt32(buffer, 4); //Server.User user = App.Inst.UserRepo.Users.FirstOrDefault(x => x.Id == userId);//Reikia suziureti id //if (user != null) //{ // user.Client = client; //} //else //{ // user = App.Inst.UserRepo.AddUser(new User(userId)); // user.Client = client; //} //Console.WriteLine("Client " + user.Id.ToString() + "connected."); //Arena.AddPlayer(new Player(user)); Arena.AddPlayer(build.GetPlayer()); break; } } } }
// Start is called before the first frame update void Start() { if (fileName == "plain") { TextBuilder textbuilder = new TextBuilder(); Director director = new Director(textbuilder); director.Construct(); string result = textbuilder.GetResult(); Debug.Log(result); } else if (fileName == "html") { HTMLBuilder htmlbuilder = new HTMLBuilder(); Director director = new Director(htmlbuilder); director.Construct(); string result = htmlbuilder.GetResult(); Debug.Log(result); } else { Debug.Log("\"plain\"か\"html\"をfileNameに入力して下さい。"); UnityEditor.EditorApplication.isPlaying = false; } }
/// <summary> /// Client /// </summary> /// <param name="args"></param> static void Main(string[] args) { #region Abstract Factory Console.WriteLine("Abstract Factory initialize"); //Step 1 SqlCommand cmd = new SqlCommand(); SqlConection cnn = new SqlConection(); cmd.Execute(); //Apply Abstract Factory pattern DbFactory db = new OracleFactory(); var con = db.createConnection(); con.Open(); var command = db.createCommand(); command.Execute(); Console.WriteLine("Abstract Factory finalize" + Environment.NewLine); #endregion #region Builder Console.WriteLine("Builder initialize"); //Step 1 var car = new Auto("Car"); car["gear"] = "127c"; car["doors"] = "4"; car["tires"] = "4"; car.Show(); Console.ReadLine(); var bike = new Auto("bike"); bike["gear"] = "50c"; bike["doors"] = "0"; bike["tires"] = "2"; bike.Show(); Console.ReadLine(); //Apply Builder pattern AutoBuilder builder; var director = new Director(); builder = new CarBuilder(); director.Construct(builder); builder.Auto.Show(); builder = new BikeBuilder(); director.Construct(builder); builder.Auto.Show(); Console.WriteLine("Builder finalize" + Environment.NewLine); #endregion #region Factory Console.WriteLine("Factory Method Initialize"); //Step 1 var login = new AuthGoogle(); login.Authorize(); Console.ReadLine(); //Apply Factory Creator[] creators = new Creator[2]; creators[0] = new FacebookCreator(); creators[1] = new GoogleCreator(); foreach (Creator c in creators) { Auth aut = c.CreateInstance(); //Factory Method aut.Authorize(); } Console.ReadLine(); Console.WriteLine("Factory Finalize" + Environment.NewLine); #endregion #region Prototype Console.WriteLine("Prototype initialize"); Book p1 = new Book(1, "Design Patterns - Book", 20.00); Book c1 = (Book)p1.Clone(); Console.WriteLine(c1.Description); DVD p2 = new DVD(2, "Design Patterns - DVD", 25.00); DVD c2 = (DVD)p2.Clone(); Console.WriteLine(c2.Description); Console.WriteLine("Prototype Finalize" + Environment.NewLine); Console.ReadKey(); #endregion #region Singleton Console.WriteLine("Singleton Initialize"); var con1 = ConnectionBD.Instance(); con1.stringConexao = "SQLServer"; con1.Open(); var con2 = ConnectionBD.Instance(); con2.stringConexao = "Oracle"; con2.Open(); if (con1.Equals(con2)) { Console.WriteLine("Equals Instances"); } Console.WriteLine("Singleton Finalize" + Environment.NewLine); Console.ReadKey(); #endregion }
public static void Main( ) { // Create one director and two builders Director director = new Director( ); IBuilder b1 = new Builder1( ); IBuilder b2 = new Builder2( ); // Construct two products director.Construct(b1); Product p1 = b1.GetResult( ); p1.Display( ); director.Construct(b2); Product p2 = b2.GetResult( ); p2.Display( ); }
public static void Main() { Director d = new Director(); IBuilder build = new BuilderA(); d.Construct(build); }
static void Main(string[] args) { Console.WriteLine("Enter the password:"******" "); Console.WriteLine("-------------------------------"); Console.WriteLine("----Strategy Design Pattern: --"); Console.WriteLine("-------------------------------"); Context context; context = new Context(new StrengthLevel1()); context.ContextInterface(password); context = new Context(new StrengthLevel2()); context.ContextInterface(password); context = new Context(new StrengthLevel3()); context.ContextInterface(password); /// <summary> /// Chain of responsibility Design Pattern. /// </summary> Console.WriteLine(" "); Console.WriteLine("---------------------------------------"); Console.WriteLine("Chain of responsibility Design Pattern:"); Console.WriteLine("---------------------------------------"); Console.WriteLine("----------------Level 1----------------"); // Setup Chain of Responsibility Requirement r1 = new RequirementMinLength(); Requirement r2 = new RequirementContainsDigit(); Requirement r3 = new RequirementConstainSpecialCharacter(); Requirement r4 = new RequirementIsNotOnTheListForbiddenPasswords(); r1.SetRequirement(r2); r2.SetRequirement(r3); r3.SetRequirement(r4); r1.HandleRequest(password); /// <summary> /// Builder Design Pattern. /// </summary> /// Console.WriteLine(" "); Console.WriteLine("---------------------------------------"); Console.WriteLine("--------Builder Design Pattern---------"); Console.WriteLine("---------------------------------------"); Director director = new Director(); BuilderPass builder1 = new BuilderLevel1(); BuilderPass builder2 = new BuilderLevel2(); BuilderPass builder3 = new BuilderLevel3(); //Level 1 Console.WriteLine("----------------Level 1----------------"); director.Construct(builder1, password); Level level1 = builder1.GetResult(); level1.Show(); //Level2 Console.WriteLine("----------------Level 2----------------"); director.Construct(builder2, password); Level level2 = builder2.GetResult(); level2.Show(); //Level3 Console.WriteLine("----------------Level 3----------------"); director.Construct(builder3, password); Level level3 = builder3.GetResult(); level3.Show(); Console.ReadKey(); }
public static void Main(string[] args) { //单例模式 Console.WriteLine("---------Singleton----------"); var s1 = Singleton.GetSingleton(); var s2 = Singleton.GetSingleton(); Console.WriteLine(s1.GetHashCode()); Console.WriteLine(s2.GetHashCode()); //简单工厂模式 Console.WriteLine("---------SimpleFactory----------"); var f1 = SimpleFoodFactory.CreateFood("TomaoScrambledEggs"); f1.Print(); var f2 = SimpleFoodFactory.CreateFood("ShreddedPorkWithPotatoes"); f2.Print(); //工厂模式 Console.WriteLine("---------Factory----------"); Creator shreddedPorkWithPotatoesFactory = new ShreddedPorkWithPotatoesFactory(); Creator tomatoScrambledEggsFactory = new TomatoScrambledEggsFactory(); Creator minceMeatEggplantFactor = new MincedMeatEggplantFactory(); var tomatoScrambleEggs = tomatoScrambledEggsFactory.CreateFoodFactory(); tomatoScrambleEggs.Print(); var shreddedPorkWithPotatoes = shreddedPorkWithPotatoesFactory.CreateFoodFactory(); shreddedPorkWithPotatoes.Print(); var minceMeatEggplant = minceMeatEggplantFactor.CreateFoodFactory(); minceMeatEggplant.Print(); //抽象工厂模式 Console.WriteLine("---------AbstractFactory----------"); AbstractFactory nanChangFactory = new NanChangFactory(); nanChangFactory.CreateYaBo().Print(); nanChangFactory.CreateYaJia().Print(); AbstractFactory shangHaiFactory = new ShangHaiFactory(); shangHaiFactory.CreateYaBo().Print(); shangHaiFactory.CreateYaJia().Print(); AbstractFactory huNanFactory = new HuNanFactory(); huNanFactory.CreateYaBo().Print(); huNanFactory.CreateYaJia().Print(); //建造者模式 Console.WriteLine("---------Builder_Patterns----------"); var director = new Director(); Builder b1 = new BuildFirst(); Builder b2 = new BuildSecond(); director.Construct(b1); var c1 = b1.GetComputer(); c1.Show(); director.Construct(b2); var c2 = b2.GetComputer(); c2.Show(); //原型模式 Console.WriteLine("---------Prototype_Patterns----------"); MonkeyKingPrototype prototype = new ConcretePrototype("pipixiong"); MonkeyKingPrototype cloneMonkeyKingPrototype = prototype.Clone() as ConcretePrototype; Console.WriteLine("1:" + cloneMonkeyKingPrototype?.Id); MonkeyKingPrototype clonePrototype = prototype.Clone() as ConcretePrototype; Console.WriteLine("2:" + cloneMonkeyKingPrototype?.Id); //适配器模式 Console.WriteLine("---------Adapter_Patterns----------"); ThreeHole threeHole = new PowerAdapter(); threeHole.Request(); //桥接模式 Console.WriteLine("---------Bridge_Patterns----------"); RemoteControl remoteControl = new ConcreteRemote(); remoteControl.Implementor = new XiaoMi(); remoteControl.On(); remoteControl.Off(); remoteControl.SetChannel(); remoteControl.Implementor = new Samsung(); remoteControl.On(); remoteControl.Off(); remoteControl.SetChannel(); //装饰者模式 Console.WriteLine("---------Decorator_Patterns----------"); Phone phone = new ApplePhone(); Decorator stickerDecorator = new Sticker(phone); stickerDecorator.Print(); Console.WriteLine("---------"); Decorator accessoriesDecorator = new Accessories(phone); accessoriesDecorator.Print(); Console.WriteLine("---------"); var sticker = new Sticker(phone); var accessories = new Accessories(sticker); accessories.Print(); //组合模式 Console.WriteLine("---------Composite_Patterns----------"); var complexGraphics = new ComplexGraphics("一个复杂图形和两条线段组成的复杂图形"); complexGraphics.Add(new Line("线A")); var complexGraphicsCG = new ComplexGraphics("一个圆和一条线组成的复杂图形"); complexGraphicsCG.Add(new Circle("圆")); complexGraphicsCG.Add(new Line("线B")); complexGraphics.Add(complexGraphicsCG); var line = new Line("线C"); complexGraphics.Add(line); Console.WriteLine("复杂图形的绘制如下:"); Console.WriteLine("---------------------"); complexGraphics.Draw(); Console.WriteLine("复杂图形绘制完成"); Console.WriteLine("---------------------"); complexGraphics.Remove(line); Console.WriteLine("移除线段C后,复杂图形的绘制如下:"); Console.WriteLine("---------------------"); complexGraphics.Draw(); Console.WriteLine("复杂图形绘制完成"); Console.WriteLine("---------------------"); //外观模式 Console.WriteLine("---------Facade_Patterns----------"); var facade = new RegistrationFacade(); if (facade.RegisterCourse("设计模式", "pomelo")) { Console.WriteLine("选课成功"); } else { Console.WriteLine("选课失败"); } //享元模式 Console.WriteLine("---------Flyweight_Patterns----------"); var externalstate = 10; var factory = new FlyweightFactory(); var flyweightA = factory.GetfFlyweight("A"); flyweightA?.Operation(externalstate); var flyweightB = factory.GetfFlyweight("B"); flyweightB?.Operation(externalstate); var flyweightC = factory.GetfFlyweight("C"); flyweightC?.Operation(externalstate); var flyweightD = factory.GetfFlyweight("D"); if (flyweightD != null) { flyweightD.Operation(externalstate); } else { Console.WriteLine("驻留池中不存在字符串D"); // 这时候就需要创建一个对象并放入驻留池中 var d = new ConcreteFlyweight("D"); factory.Flyweights.Add("D", d); } //代理模式 Console.WriteLine("---------Proxy_Patterns----------"); Person proxy = new Friend(); proxy.BuyProduct(); //模板方法 Console.WriteLine("---------Template_Patterns----------"); var spinach = new Spinach(); spinach.cookVegetable(); //命令模式 Console.WriteLine("---------Command_Patterns----------"); var receiver = new Receiver(); Command command = new ConcreteCommand(receiver); var invoke = new Invoke(command); invoke.ExecuteCommand(); //迭代器模式 Console.WriteLine("---------Iterator_Patterns----------"); IListCollection list = new ConcreteList(); var terator = list.GetITerator(); while (terator.MoveNext()) { var i = (int)terator.GetCurrent(); Console.WriteLine(i.ToString()); terator.Next(); } //观察者模式 Console.WriteLine("---------Observer_Patterns----------"); TenXun tenXun = new TenXunGame("LOL", "游戏需要更新"); tenXun.AddObserver(new Subscriber("pomelo")); tenXun.AddObserver(new Subscriber("yuuko")); tenXun.Update(); //中介者模式 Console.WriteLine("---------Mediator_Patterns----------"); AbstractCardPartner a = new ParterA(); AbstractCardPartner b = new ParterB(); a.MoneyCount = 20; b.MoneyCount = 20; AbstractMediator mediator = new MediatorPater(a, b); a.ChangCount(5, mediator); Console.WriteLine("A现在的钱是:{0}", a.MoneyCount); Console.WriteLine("B现在的钱是:{0}", b.MoneyCount); b.ChangCount(10, mediator); Console.WriteLine("A现在的钱是:{0}", a.MoneyCount); Console.WriteLine("B现在的钱是:{0}", b.MoneyCount); //状态者模式 Console.WriteLine("---------state_Patterns----------"); var account = new Account("pomelo"); account.Deposit(1000); account.Deposit(200); account.Deposit(600); account.PayInterest(); account.Withdraw(2000); account.Withdraw(500); //策略者模式 Console.WriteLine("---------stragety_Patterns----------"); var operation = new InterestOperation(new PersonalTaxStrategy()); Console.WriteLine("个人支付的税为:{0}", operation.GetTax(5000.00)); operation = new InterestOperation(new EnterpriseTaxStrategy()); Console.WriteLine("企业支付的税为:{0}", operation.GetTax(50000.00)); //责任链模式 Console.WriteLine("---------Responsibility_Patterns----------"); var purchaseRequest = new PurchaseRequest(4000, "phone"); var softPurchaseRequest = new PurchaseRequest(10000, "vs"); var computeRequest = new PurchaseRequest(40000, "computer"); Approver manager = new Manager("pomelo"); Approver vp = new VicePresident("yuuko"); Approver pre = new President("jesse"); manager.NextApprover = vp; vp.NextApprover = pre; manager.ProcessRequest(purchaseRequest); manager.ProcessRequest(softPurchaseRequest); manager.ProcessRequest(computeRequest); //访问者模式 Console.WriteLine("---------Vistor_Patterns----------"); var objectStructure = new ObjectStructure(); foreach (Element e in objectStructure.Elements) { e.Accept(new ConcreteVistor()); } //备忘录模式 Console.WriteLine("---------Memento_Patterns----------"); var persons = new List <ContactPerson> { new ContactPerson { Name = "Pomelo", MobileNum = "123445" }, new ContactPerson { Name = "Yuuko", MobileNum = "234565" }, new ContactPerson { Name = "Jeese ", MobileNum = "231455" } }; var mobileOwner = new MobileOwner(persons); mobileOwner.Show(); var caretaker = new Caretaker(); caretaker.ContactMementoDic.Add(DateTime.Now.ToString(CultureInfo.InvariantCulture), mobileOwner.CreateContactMemento()); Console.WriteLine("----移除最后一个联系人--------"); mobileOwner.ContactPersons.RemoveAt(2); mobileOwner.Show(); Thread.Sleep(1000); caretaker.ContactMementoDic.Add(DateTime.Now.ToString(CultureInfo.InvariantCulture), mobileOwner.CreateContactMemento()); Console.WriteLine("-------恢复联系人列表,请从以下列表选择恢复的日期------"); var keyCollection = caretaker.ContactMementoDic.Keys; foreach (var k in keyCollection) { Console.WriteLine("Key = {0}", k); } while (true) { Console.Write("请输入数字,按窗口的关闭键退出:"); var index = -1; try { index = int.Parse(Console.ReadLine()); } catch { Console.WriteLine("输入的格式错误"); continue; } if (index < keyCollection.Count && caretaker.ContactMementoDic.TryGetValue(keyCollection.ElementAt(index), out var contactMentor)) { mobileOwner.RestoreMemento(contactMentor); mobileOwner.Show(); } else { Console.WriteLine("输入的索引大于集合长度!"); } } }
static void Main(string[] args) { //Creational Patterns Console.WriteLine("Creational Patterns"); #region Singleton Console.WriteLine("***Singleton Pattern Demo***\n"); Console.WriteLine("Trying to create instance s1."); Singleton s1 = Singleton.Instance; Console.WriteLine("Trying to create instance s2."); Singleton s2 = Singleton.Instance; if (s1 == s2) { Console.WriteLine("Only one instance exists."); } else { Console.WriteLine("Different instances exists."); } #endregion Console.WriteLine("###########################"); #region Prototype Console.WriteLine("***Prototype Pattern Demo***\n"); //Base or Original BasicCar nano_base = new Nano("Green Nano") { Price = 100000 }; BasicCar ford_base = new Ford("FordYellow") { Price = 500000 }; BasicCar bc1; //Nano bc1 = nano_base.Clone(); bc1.Price = nano_base.Price + BasicCar.SetPrice(); Console.WriteLine($"Car is {bc1.ModelName}, and price is {bc1.Price}"); //Ford bc1 = ford_base.Clone(); bc1.Price = ford_base.Price + BasicCar.SetPrice(); Console.WriteLine($"Car is {bc1.ModelName}, and price is {bc1.Price}"); #endregion Console.WriteLine("###########################"); #region Buuilder Console.WriteLine("***Builder Pattern Demo***"); Director director = new Director(); IBuilder b1 = new Car("Ford"); IBuilder b2 = new MotorCycle("Honda"); //Mking Car director.Construct(b1); Product p1 = b1.GetVehicle(); p1.Show(); //Making Motorcycle director.Construct(b2); Product p2 = b2.GetVehicle(); p2.Show(); #endregion Console.WriteLine("###########################"); #region Factory Method Pattern Console.WriteLine("***Factory Pattern Demo***\n"); // Creating a Tiger Factory AnimalFactory tigerFactory = new TigerFactory(); // Creating a tiger using the Factory Method IAnimal aTiger = tigerFactory.CreateAnimal(); aTiger.AboutMe(); aTiger.Action(); // Creating a DogFactory AnimalFactory dogFactory = new DogFactory(); // Creating a dog using the Factory Method IAnimal aDog = dogFactory.CreateAnimal(); aDog.AboutMe(); aDog.Action(); #endregion Console.WriteLine("###########################"); #region Abstract Factory Pattern Console.WriteLine("***Abstract Factory Pattern Demo***\n"); //Making a wild dog through WildAnimalFactory IAnimalFactory wildAnimalFactory = new WildAnimalFactory(); IDog wildDog = wildAnimalFactory.GetDog(); wildDog.Speak(); wildDog.Action(); //Making a wild tiger through WildAnimalFactory ITiger wildTiger = wildAnimalFactory.GetTiger(); wildTiger.Speak(); wildTiger.Action(); Console.WriteLine("******************"); //Making a pet dog through PetAnimalFactory IAnimalFactory petAnimalFactory = new PetAnimalFactory(); IDog petDog = petAnimalFactory.GetDog(); petDog.Speak(); petDog.Action(); //Making a pet tiger through PetAnimalFactory ITiger petTiger = petAnimalFactory.GetTiger(); petTiger.Speak(); petTiger.Action(); #endregion Console.WriteLine("###########################"); //Structural Patterns Console.WriteLine("Structural Patterns"); #region Proxy Pattern Console.WriteLine("***Proxy Pattern Demo***"); Proxy px = new Proxy(); px.DoSomeWork(); #endregion Console.WriteLine("###########################"); #region Decorator Pattern Console.WriteLine("***Decorator Pattern Simulation***"); ConcreteComponent cc = new ConcreteComponent(); ConcreteDecoratorEx1 decorator1 = new ConcreteDecoratorEx1(); decorator1.SetTheComponent(cc); decorator1.MakeHouse(); ConcreteDecoratorEx2 decorator2 = new ConcreteDecoratorEx2(); //Adding results from decorator1 decorator2.SetTheComponent(decorator1); decorator2.MakeHouse(); #endregion Console.WriteLine("###########################"); #region Adapter Pattern Console.WriteLine("***Adapter Pattern Demo***\n"); CalculatorAdapter cal = new CalculatorAdapter(); Triangle t = new Triangle(20, 10); Console.WriteLine($"Area of Triangle is {cal.GetArea(t)} square unit"); #endregion Console.WriteLine("###########################"); #region Facade Pattern Console.WriteLine("***Facade Pattern Demo***"); RobotFacade robotFacade1 = new RobotFacade(); // Creating Robots robotFacade1.ConstructMilanoRobot(); RobotFacade robotFacade2 = new RobotFacade(); // Creating Robots robotFacade2.ConstructRobonautRobot(); robotFacade1.DestroyMilanoRobot(); //Destroying Robots robotFacade2.DestroyRobonautRobot(); #endregion Console.WriteLine("###########################"); #region Flyweight Pattern Console.WriteLine("***Flyweight Pattern Demo***"); RobotFactory myFactory = new RobotFactory(); IRobot shape = myFactory.GetRobotFromFactory("Small"); shape.Print(); //Creating small robots for (int i = 0; i < 2; i++) { shape = myFactory.GetRobotFromFactory("Small"); shape.Print(); } int numOfDistinctRobots = myFactory.TotalObjectsCreated; Console.WriteLine($"Number of distinct robot objects is {numOfDistinctRobots}"); //Creating large robots for (int i = 0; i < 5; i++) { shape = myFactory.GetRobotFromFactory("Large"); shape.Print(); } numOfDistinctRobots = myFactory.TotalObjectsCreated; Console.WriteLine($"Distinct robot objects created till now {numOfDistinctRobots}"); #endregion Console.WriteLine("###########################"); #region Composite Pattern #region Mathematics department Console.WriteLine("***Composite Pattern***"); //2 Lecturers work in Mathematics department Employee mathLecturer1 = new Employee { Name = "M. Joy", Dept = "Mathematics", Designation = "Lecturer" }; Employee mathLecturer2 = new Employee { Name = "M. Ronny", Dept = "Mathematics", Designation = "Lecturer" }; //The college has Head of Department in Mathematics CompositeEmployee hodMaths = new CompositeEmployee { Name = "Mrs. S. Das", Dept = "Maths", Designation = "HOD-Maths" }; //Lecturers of Mathematics directly perort to HOD-Maths hodMaths.AddEmpployee(mathLecturer1); hodMaths.AddEmpployee(mathLecturer2); #endregion #region Computer Science department //3 lecturers work in Computer Sc. department Employee cseLecturer1 = new Employee { Name = "C. Sam", Dept = "Computer Sciense", Designation = "Lecturer" }; Employee cseLecturer2 = new Employee { Name = "C. Jones", Dept = "Computer Sciense", Designation = "Lecturer" }; Employee cseLecturer3 = new Employee { Name = "C. Marium", Dept = "Computer Sciense", Designation = "Lecturer" }; //The College has a Head of Department in Computer science CompositeEmployee hodCompSc = new CompositeEmployee { Name = "Mr. V. Sarcar", Dept = "Computer Sc.", Designation = "HOD-Computer Sc." }; //Lecturers of Computer Sc. directly reports to HOD-CSE hodCompSc.AddEmpployee(cseLecturer1); hodCompSc.AddEmpployee(cseLecturer2); hodCompSc.AddEmpployee(cseLecturer3); #endregion #region Top level management //College Principial CompositeEmployee principal = new CompositeEmployee { Name = "Dr.S.Som", Dept = "Planning-Supervising-Managing", Designation = "Principal" }; //Mead of Department of Math and Computer Sciense apply to Principal principal.AddEmpployee(hodMaths); principal.AddEmpployee(hodCompSc); #endregion Console.WriteLine("Details of a Principal are these: "); principal.DisplayDetails(); Console.WriteLine("Details of HOD object are these: "); hodCompSc.DisplayDetails(); Console.WriteLine("Details of individual employee are these: "); mathLecturer1.DisplayDetails(); //Lecturer leaves hodCompSc.RemoveEmployee(cseLecturer2); Console.WriteLine("After resignstion there are only these leecturers"); principal.DisplayDetails(); #endregion }