標籤:設計模式 java 原型模式
原型模式屬於對象的建立模式。通過給出一個原型對象來指明所有建立對象的類型,然後用複製這個原型對象的辦法建立出更多同類型的對象。
原型模式有簡單形式和登機形式兩種表現 形式。
簡單形式的原始模型模式
簡單形式UML類圖如下:
原型模式的角色有
用戶端角色(ClientPro):
抽象原型角色(ProtoType):
具體原型角色(ConcreteProtoType):被複製的對象
代碼如下:
public interface ProtoType { /** * 根據自身複製出新的對象 * @author 付玉偉 * @time 2015-3-25 下午08:40:01 * @return */ public Object clone();}public class ConcreteProtoType1 implements ProtoType { public ProtoType clone(){ // 複製自己 ProtoType prototype = new ConcreteProtoType1(); return prototype; }}public class ConcreteProtoType2 implements ProtoType { /** * 複製自己 */ public Object clone(){ ProtoType protoType = new ConcreteProtoType2(); return protoType; }}public class ClientPro { /** * 持有原型對象介面 */ private ProtoType protoType; /** * 傳入需要的原型介面 * @param protoType */ public ClientPro(ProtoType protoType){ this.protoType = protoType; } public void operation(ProtoType p){ ProtoType copypt = (ProtoType) p.clone(); }}
登記形式的原始模型模式
UML類圖如下:
代碼可以根據類圖來看
兩種形式的比較:
如果需要建立的原型對象資料較少而且比較固定的話,可以採取第一種形式,在這種情況下,原型對象的引用可以由用戶端自己儲存。
如果要建立的原型對象資料不固定,可以採取第二種方式。這種情況下,用戶端並不儲存對原型對象的引用,這個任務被交給管理員對象。在複製一個原型對象之前,用戶端可以查看管理員對象是否已經有一個滿足要求的原型。如果有,可以直接從管理員類取得這個對象引用,如果沒有,用戶端就需要自行複製此原型對象。
在什麼情況下使用原型模式?
假設一個系統的產品類是動態載入的,而且產品類具有一定等級結構。這個時候如果採取原廠模式的話,工廠類不得不具有一個相應的等級結構。而產品類的等級結構一旦變化,工廠類的等級結構就不得不變化,對於經常變的系統採用原廠模式就不方便了。
這時候如果採用原型模式,給每一個產品類配備一個複製方法,可以避免使用原廠模式帶來的固定等級結構。
原型模式的優點:
1、允許動態增加或減少產品類
2、提供簡化的建立結構
3、具有給一個應用軟體動態載入新功能的能力
4、產品類不需要非得有任何實現確定的等級結構
Java 設計模式——原型模式(Prototype)