Construct() 공개 메소드

public Construct ( Builder builder ) : void
builder Builder
리턴 void
예제 #1
0
        public static void Test()
        {
            var director = new Director();

            director.Construct(new ConcreteBuilder1());
            director.Construct(new ConcreteBuilder2());
        }
예제 #2
0
    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();
    }
예제 #3
0
	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();
	}
예제 #4
0
파일: Builder.cs 프로젝트: Saroko-dnd/My_DZ
 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();
 }
예제 #5
0
 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();
 }
예제 #6
0
        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;
            }));
        }
예제 #8
0
        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(); });
        }
예제 #9
0
        /// <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();
        }
예제 #10
0
        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);
        }
예제 #11
0
        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");
        }
예제 #12
0
    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());
        }
    }
예제 #13
0
        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());
        }
예제 #16
0
    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);
    }
예제 #17
0
        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;
     }
 }
예제 #19
0
        /// <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( );
        }
예제 #21
0
 public static void Main()
 {
     Director d = new Director();
     IBuilder build = new BuilderA();
     d.Construct(build);
 }
예제 #22
0
        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();
        }
예제 #23
0
        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("输入的索引大于集合长度!");
                }
            }
        }
예제 #24
0
        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
        }