抽象a直接依賴於實現細節b
抽象a直接依賴於抽象B,實現細節b依賴於抽象B。
在軟件系統中。經常面臨着“某些結構複雜的對象”
如何應對這種變化?如何向“客戶程序(使用這些對象的程序)”隔離出“這些交易對象”。
從而使得“依賴這些易變對象的客戶程序”不隨便需求改變而改變。
假設我們現在有我們現在開發一個遊戲系統
裏面有很都個角色都作自己的事情。
於是我們就下出下面
經過分析得到這幾個角色是一些不斷變法的的對象
現在怎麼辦?
想想設計模式;應用於變法的設計模式。
先找那個是不變的
那些是變的
把不變的抽象成接口 於是有有這個結構
{
public void run()
{
NormalActor noramlActor1=new NormalActor();
NormalActor noramlActor2=new NormalActor();
NormalActor noramlActor3=new NormalActor();
flyactor flyactor1=new flyactory();
flyactor flyactor2=new flyactory();
flyactor flyactor3=new flyactory();
WaterActor waterActor1=new WaterActor();
WaterActor waterActor2=new WaterActor();
WaterActor waterActor3=new WaterActor();
}
}
原型設計模式
意圖:
使用原型實例制定創階對象的種類。然後通過高背這些原型來創建新的對象。
////////////////////////////////////////////////////////
抽象類
{
public abstract NormalActor clone();
}
public abstract class FlyActor implements Cloneable
{
public abstract NormalActor clone();
}
public abstract FlyActor WaterActor implements Cloneable
{
public abstract WaterActor clone();
}
/////////////////////////////////////////
具體類
{
public NormalActor clone()
{
return (NormalActorA)this.clone()
}
}
public class FlyActorA extends FlyActo
{
.............
}
public class WaterActorA extends WaterActor
{
....
}
/////////////////////////////////////////////
{
public void run(NormalActor normalActor1,flyactory flyactor,WaterActor wateracto)
{
NormalActor noramlActor1=normalactor.clone();
NormalActor noramlActor2=normalactor.clone();
NormalActor noramlActor3=normalactor.clone();
Flyactor flyActor1=new flyactor.clone();
Flyactor flyActor2=new flyactor.clone();
Flyactor flyActor3=new flyactor.clone();
WaterActor waterActor1=wateractor.clone();
WaterActor waterActor2=wateractor.clone();
WaterActor waterActor3=wateractor.clone();
}
這樣在編譯前就沒有有依賴關係。
}
總結
prototype模式用於隔離類對象的使用者和軀體類型(易變類)之間的耦合關係,
他同樣要求這些“易變類”擁有“穩定的接口”;
prototye模式對於“如何創建易變的屍體對象”採用“原型克隆”的方法來作。他的使用我們可以非常
靈活地動態創建“擁有某些穩定接口”地新對象-所需工作僅僅是註冊一個新類地對象
(即原型),然後在任何需要地地方不斷地Clone。