任何一種的設計構思,一定會有所謂的Prototype,當然,程式也不例外。畢竟在模組架構上,一定要有一個根基和初始結構。
在開發過程中,經常面臨著結構複雜的物件的建置工作,因需求的變化,但是它們卻擁有比較穩定一致的介面,這就是初始結構。
用原型實例指定建置物件的種類,並且透過複製這些原型創建新的物件。
建置一個抽象類別,用來複製物件,但不實作:
public abstract class NormalActor
{
public abstract NormalActor clone();
}
透過繼承,實作繼承至父類別而來的clone,並且覆寫實作,可以如法泡製一個相同的NormalActorB、C的類別,並覆寫實作不同的建構子:
public class NormalActorA : NormalActor
{
public override NormalActor clone()
{
Console.WriteLine("NormalActorA
is call");
return (NormalActor)this.MemberwiseClone();
}
}
public class GameSystem
{
public void Run(NormalActor normalActor)
{
NormalActor normalActor1 =
normalActor.clone();
NormalActor normalActor2 =
normalActor.clone();
NormalActor normalActor3 =
normalActor.clone();
NormalActor normalActor4 =
normalActor.clone();
NormalActor normalActor5 =
normalActor.clone();
}
}
class Program
{
static void Main(string[] args)
{
GameSystem gameSystem = new GameSystem();
gameSystem.Run(new NormalActorA());
}
}
需要創建新的物件(flyActor)時,只需New此抽象類別,然後具體類執行Clone():
public abstract class FlyActor
{
public abstract FlyActor clone();
}
public class FlyActorB : FlyActor
{
public override FlyActor clone()
{
return (FlyActor)this.MemberwiseClone();
}
}
class Program
{
static void Main(string[] args)
{
GameSystem gameSystem = new GameSystem();
gameSystem.Run(new NormalActorA(), new FlyActorB());
}
}
New這些易變類別的實體物件採用「Prototype clone」的方法來做,可以非常靈活地動態new擁有某些穩定介面中的新物件,只要在註冊的地方不斷地Clone。
Clone顧名思義,就是完整的複製,之後只需要為些許不同的改變而改變,達到「擁有比較穩定一致的介面」的需求。
-雲遊山水為知已逍遙一生而忘齡- 電腦神手
沒有留言:
張貼留言