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!"); }
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(); }
public object Clone() { ConcretePrototype pNewObj = new ConcretePrototype(); pNewObj.Name = this.Name; return(pNewObj); }
static void Main() { ConcretePrototype p1 = new ConcretePrototype("p1"); ConcretePrototype c1 = (ConcretePrototype)p1.Clone(); Console.WriteLine("Cloned: {0}", c1.Id); Console.ReadKey(); }
public void Test() { var p1 = new ConcretePrototype(); p1.Name = "Hello"; var p2 = (ConcretePrototype)p1.Clone(); Assert.AreEqual <string>("Hello", p2.Name); }
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)); }
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; } }
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); }
static void PrototypeInvoke() { ConcretePrototype concretePrototypeA = new ConcretePrototype { Attr = "Monkey" }; var ConcretePrototypeB = (ConcretePrototype)concretePrototypeA.Clone(); Console.WriteLine(concretePrototypeA == ConcretePrototypeB); Console.WriteLine(concretePrototypeA.Attr == ConcretePrototypeB.Attr); }
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); }
public Prototype Clone(bool deep) { if (deep) {//深克隆(创建新成员对象,也可以通过序列化/反序列化创建) ConcretePrototype prototype = MemberwiseClone() as ConcretePrototype; prototype.member = new Member(); return(prototype); } else {//浅克隆(直接拷贝) return(MemberwiseClone() as ConcretePrototype); } }
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); }
void UnitTest() { // 原始物件 ConcretePrototype Obj = new ConcretePrototype(); Obj.Name = "ConcreteObj1"; // 复制物件 ConcretePrototype CloneObj = Obj.Clone() as ConcretePrototype; // 显示 Debug.Log("原始物件:" + Obj.Name); Debug.Log("复制物件:" + CloneObj.Name); }
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(); }
/// <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(); }
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)); }
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("---------------------------"); }
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(); }
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(); }
public static void Test() { var shallowCopy = new ConcretePrototype().Clone(true); var deepCopy = new ConcretePrototype().Clone(false); }
public ConcretePrototype(ConcretePrototype prototype) => Name = prototype.Name;
internal ConcretePrototype(ConcretePrototype instance) { FirstProperty = instance.FirstProperty; secondProperty = instance.secondProperty; thirdProperty = instance.thirdProperty; }
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); }
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("输入的索引大于集合长度!"); } } }
public ComplexClass(ConcretePrototype someProperty) { this.SomeProperty = someProperty; }
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); }