動機:使用原型執行個體指定建立對象的種類,然後通過拷貝這些原型來建立新的對象。某些結構複雜物件面臨著劇烈變化,但擁有比較穩定一致的介面,如何隔離出這些易變對象,使客戶程式不隨之改變?
情境: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;
}
}
}