动机:使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。某些结构复杂对象面临着剧烈变化,但拥有比较稳定一致的接口,如何隔离出这些易变对象,使客户程序不随之改变?场景:ThinkPad的主板和CPU有多种,根据系列不同,如何根据已有的硬盘和CPU生产新的主板和CPU。结构 代码实现namespace DesignPattern.Prototype{ public abstract class CPU { public abstract CPU Clone(); // 打上流水线序列号之类每个克隆品不同的属性 public abstract void DoSomething(); } public class T43CPU : CPU { public override CPU Clone() { return (CPU)this.MemberwiseClone(); } public override void DoSomething() { } } public class T60CPU : CPU { public override CPU Clone() { return (CPU)this.MemberwiseClone(); } public override void DoSomething() { } }} namespace DesignPattern.Prototype{ public abstract class Mainboard { public abstract Mainboard Clone(); // 打上流水线序列号之类每个克隆品不同的属性 public abstract void DoSomething(); } public class T43Mainboard : Mainboard { public override Mainboard Clone() { return (Mainboard)this.MemberwiseClone(); } public override void DoSomething() { } } public class T60Mainboard : Mainboard { public override Mainboard Clone() { return (Mainboard)this.MemberwiseClone(); } public override void DoSomething() { } }} /**//* *动机:使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。某些结构复杂对象面临着剧烈变化,但拥有比较稳定一致的接口,如何隔离出这些易变对象,使客户程序不随之改变? *场景:ThinkPad的主板和CPU有多种,根据系列不同,如何根据已有的硬盘和CPU生产新的主板和CPU。*/namespace DesignPattern.Prototype{ public class ThinkPadFactory { public Mainboard CreateMainboard(Mainboard mainBoard) { Mainboard mainBoardCopy = mainBoard.Clone(); mainBoardCopy.DoSomething(); return mainBoard; } public CPU CreateCPU(CPU cpu) { CPU cpuCopy = cpu.Clone(); cpu.DoSomething(); return cpu; } }} 转载于:https://www.cnblogs.com/Charly/archive/2007/06/06/773482.html