コード例 #1
0
        static void Main(string[] args)
        {
            ConcurrentBag <int> list = new ConcurrentBag <int>();

            tst2 s = new tst2();

            test t = new test();

            //TestEntity te=new TestEntity();
            //te.Arg1 = "11111";
            //te.entity=new TestEntity2{Arg3 ="444444444"};
            //var tt=(TestEntity)te.();

            //tt.Arg1 = "22222";
            //tt.entity.Arg3 = "3333333";
            SunWuKong sunWuKong = new ConcretePrototype("孙悟空");

            var s1 = sunWuKong.Clone() as ConcretePrototype;

            Console.WriteLine("Cloned1:\t" + s1.Id);

            var s2 = sunWuKong.Clone() as ConcretePrototype;

            Console.WriteLine("Cloned2:\t" + s2.Id);


            Console.WriteLine("Hello World!");
        }
コード例 #2
0
        private static void ShowPrototype()
        {
            Console.WriteLine("================================================");
            Console.WriteLine("\nPattern code (Prototype):");
            Prototype prototype      = new ConcretePrototype("Hellow, world");
            Prototype prototypeClone = prototype.Clone();

            prototypeClone.ShowField();

            Console.WriteLine("Real code (Prototype):");
            ColorManager colormanager = new ColorManager
            {
                ["red"]   = new Color(255, 0, 0),
                ["green"] = new Color(0, 255, 0),
                ["blue"]  = new Color(0, 0, 255),
                ["angry"] = new Color(255, 54, 0),
                ["peace"] = new Color(128, 211, 128),
                ["flame"] = new Color(211, 34, 20)
            };

            ColorPrototype redColor   = colormanager["red"].Clone();
            ColorPrototype peaceColor = colormanager["peace"].Clone();

            redColor.ShowColor();
            peaceColor.ShowColor();
        }
コード例 #3
0
        public object Clone()
        {
            ConcretePrototype pNewObj = new ConcretePrototype();

            pNewObj.Name = this.Name;
            return(pNewObj);
        }
コード例 #4
0
    static void Main()
    {
        ConcretePrototype p1 = new ConcretePrototype("p1");
        ConcretePrototype c1 = (ConcretePrototype)p1.Clone();

        Console.WriteLine("Cloned: {0}", c1.Id);
        Console.ReadKey();
    }
コード例 #5
0
        public void Test()
        {
            var p1 = new ConcretePrototype();

            p1.Name = "Hello";
            var p2 = (ConcretePrototype)p1.Clone();

            Assert.AreEqual <string>("Hello", p2.Name);
        }
コード例 #6
0
        public void Run()
        {
            Prototype prototype = new ConcretePrototype(1);

            Console.WriteLine(string.Format("Prototype ID: {0}", prototype.Id));
            Prototype clone = prototype.Clone();

            Console.WriteLine(string.Format("Clone ID: {0}", clone.Id));
        }
コード例 #7
0
ファイル: Program.cs プロジェクト: janeski/DesignPatterns
        static void Main(string[] args)
        {
            var prototype = new ConcretePrototype(1000);

            for (int i = 1; i < 1000; i++)
            {
                ConcretePrototype tempotype = prototype.Clone() as ConcretePrototype;
                tempotype.X *= i;

            }
        }
コード例 #8
0
        public void TestGenericInstanceCreation()
        {
            ConcretePrototype template = new ConcretePrototype(42);

            IAbstractFactory <IProduct> factory = new PrototypeFactory <
                IProduct, ConcretePrototype
                >(template);

            IProduct factoryCreatedProduct = factory.CreateInstance();

            Assert.AreEqual(template.Value, factoryCreatedProduct.Value);
        }
コード例 #9
0
ファイル: Program.cs プロジェクト: schangxiang/Code
        static void PrototypeInvoke()
        {
            ConcretePrototype concretePrototypeA = new ConcretePrototype
            {
                Attr = "Monkey"
            };

            var ConcretePrototypeB = (ConcretePrototype)concretePrototypeA.Clone();

            Console.WriteLine(concretePrototypeA == ConcretePrototypeB);
            Console.WriteLine(concretePrototypeA.Attr == ConcretePrototypeB.Attr);
        }
コード例 #10
0
        public void TestPrototypeDisposal()
        {
            ConcretePrototype template = new ConcretePrototype(42);

            PrototypeFactory <IProduct, ConcretePrototype> factory = new PrototypeFactory <
                IProduct, ConcretePrototype
                >(template);

            Assert.IsFalse(template.IsDisposed);
            factory.Dispose();
            Assert.IsTrue(template.IsDisposed);
        }
コード例 #11
0
 public Prototype Clone(bool deep)
 {
     if (deep)
     {//深克隆(创建新成员对象,也可以通过序列化/反序列化创建)
         ConcretePrototype prototype = MemberwiseClone() as ConcretePrototype;
         prototype.member = new Member();
         return(prototype);
     }
     else
     {//浅克隆(直接拷贝)
         return(MemberwiseClone() as ConcretePrototype);
     }
 }
コード例 #12
0
        public void PrototypeTest()
        {
            IProtoType sample = new ConcretePrototype();

            sample.Name = "A";

            IProtoType cloned = sample.Clone();

            Assert.AreEqual(sample.Name, cloned.Name);
            cloned.Name = "B";

            Assert.AreNotEqual(sample.Name, cloned.Name);
        }
コード例 #13
0
    void UnitTest()
    {
        // 原始物件
        ConcretePrototype Obj = new ConcretePrototype();

        Obj.Name = "ConcreteObj1";

        // 复制物件
        ConcretePrototype CloneObj = Obj.Clone() as ConcretePrototype;

        // 显示
        Debug.Log("原始物件:" + Obj.Name);
        Debug.Log("复制物件:" + CloneObj.Name);
    }
コード例 #14
0
        public void TestProtoType()
        {
            var prototype = new ConcretePrototype(1000);

            for (int i = 1; i < 10; i++)
            {
                var tempotype = prototype.Clone() as ConcretePrototype;

                // Usage of values in prototype to derive a new value.
                tempotype.X *= i;
                tempotype.PrintX();
            }
            Console.ReadKey();
        }
コード例 #15
0
        /// <summary>
        /// 原型模式
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button6_Click(object sender, EventArgs e)
        {
            MonkeyKingPrototype prototypeMonkeyKing = new ConcretePrototype("MonkeyKing");

            // 变一个
            MonkeyKingPrototype cloneMonkeyKing = prototypeMonkeyKing.Clone() as ConcretePrototype;

            Console.WriteLine("Cloned1:\t" + cloneMonkeyKing.Id);

            // 变两个
            MonkeyKingPrototype cloneMonkeyKing2 = prototypeMonkeyKing.Clone() as ConcretePrototype;

            Console.WriteLine("Cloned2:\t" + cloneMonkeyKing2.Id);
            Console.ReadLine();
        }
コード例 #16
0
        public void PrototypeDemo(double userNumber)
        {
            var prototype = new ConcretePrototype(dataService, userNumber);

            prototype.InitializeFromExternalService();

            prototype.OperationA();
            Console.WriteLine("Prototype value before: {0}", string.Format("{0:0.00}", prototype.CurrentValue));

            var clone = prototype.Clone();

            clone.OperationB();

            Console.WriteLine("Prototype value after: {0}", string.Format("{0:0.00}", prototype.CurrentValue));
            Console.WriteLine("Clone value: {0}", string.Format("{0:0.00}", clone.CurrentValue));
        }
コード例 #17
0
ファイル: Program.cs プロジェクト: PresnyakovIgorDev/Patterns
        private static void PrototypeTest()
        {
            Console.WriteLine("---------------------------");
            Console.WriteLine("Prototype");

            var prototype      = new ConcretePrototype("1");
            var prototypeClone = prototype.Clone();

            Console.WriteLine(prototype);
            Console.WriteLine(prototypeClone);

            prototypeClone.Id = "2";

            Console.WriteLine(prototype);
            Console.WriteLine(prototypeClone);
            Console.WriteLine("---------------------------");
        }
コード例 #18
0
    public static void Main()
    {
        ConcretePrototype cp1 = new ConcretePrototype(25);
        ConcretePrototype cp2 = (ConcretePrototype)cp1.Clone();

        Console.WriteLine("cp1.SomeProperty == cp2.SomeProperty? {0}", (cp1.SomeProperty == cp2.SomeProperty));
        Console.WriteLine("cp1 == cp2? {0}", (cp1 == cp2));

        Console.WriteLine();

        ComplexClass cc1 = new ComplexClass(cp1);
        ComplexClass cc2 = (ComplexClass)cc1.Clone();

        Console.WriteLine("cc1.SomeProperty == cc2.SomeProperty? {0}", (cc1.SomeProperty == cc2.SomeProperty));
        Console.WriteLine("cc1 == cp2? {0}", (cc1 == cc2));

        Console.ReadKey();
    }
コード例 #19
0
        static void Main(string[] args)
        {
            MonkeyKingPrototype prototypeMonkeyKing = new ConcretePrototype("MonkeyKing");

            MonkeyKingPrototype cloneMonkeyKing1 = prototypeMonkeyKing.Clone() as ConcretePrototype;

            Console.WriteLine("Clone1:\t" + cloneMonkeyKing1?.Id);

            MonkeyKingPrototype cloneMonkeyKing2 = prototypeMonkeyKing.Clone() as ConcretePrototype;

            Console.WriteLine("Clone2:\t" + cloneMonkeyKing2?.Id);

            prototypeMonkeyKing.Id = "MonkeyKingNew";

            // 当前对象的非静态字段复制到该新对象。如果字段是值类型的,则对该字段执行逐位复制。如果字段是引用类型,则复制引用但不复制引用的对象。因此,原始对象及其复本引用的是同一对象。
            Console.WriteLine("CloneNew1:\t" + cloneMonkeyKing1?.Id);
            Console.WriteLine("CloneNew2:\t" + cloneMonkeyKing2?.Id);

            Console.WriteLine("Clone3:\t" + prototypeMonkeyKing.Id);

            Console.ReadLine();
        }
コード例 #20
0
ファイル: Test.cs プロジェクト: onurak/GOFDesignPatterns
 public static void Test()
 {
     var shallowCopy = new ConcretePrototype().Clone(true);
     var deepCopy = new ConcretePrototype().Clone(false);
 }
コード例 #21
0
 public ConcretePrototype(ConcretePrototype prototype) => Name = prototype.Name;
コード例 #22
0
 internal ConcretePrototype(ConcretePrototype instance)
 {
     FirstProperty = instance.FirstProperty;
     secondProperty = instance.secondProperty;
     thirdProperty = instance.thirdProperty;
 }
コード例 #23
0
    public void TestGenericInstanceCreation() {
      ConcretePrototype template = new ConcretePrototype(42);

      IAbstractFactory<IProduct> factory = new PrototypeFactory<
        IProduct, ConcretePrototype
      >(template);

      IProduct factoryCreatedProduct = factory.CreateInstance();

      Assert.AreEqual(template.Value, factoryCreatedProduct.Value);
    }
コード例 #24
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("输入的索引大于集合长度!");
                }
            }
        }
コード例 #25
0
 public ComplexClass(ConcretePrototype someProperty)
 {
     this.SomeProperty = someProperty;
 }
コード例 #26
0
    public void TestPrototypeDisposal() {
      ConcretePrototype template = new ConcretePrototype(42);

      PrototypeFactory<IProduct, ConcretePrototype> factory = new PrototypeFactory<
        IProduct, ConcretePrototype
      >(template);

      Assert.IsFalse(template.IsDisposed);
      factory.Dispose();
      Assert.IsTrue(template.IsDisposed);
    }