作為物件的建立模式,與單例模式形成對比,用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。
原型模式要求物件實現乙個可以「轉殖」自身的介面,這樣就可以通過複製乙個例項物件本身來建立乙個新的例項。這樣一來,通過原型例項建立新的物件,就不再需要關心這個例項本身的型別,只要實現了轉殖自身的方法,就可以通過這個方法來獲取新的物件,而無須再去通過new來建立。
寫乙個簡單的原型模式
首先我們要寫乙個擁有轉殖方法的介面,並讓所有我們想用原型模式去建立物件的類實現它,我們稱它為抽象原型
public
inte***ce
prototype
然後我們去寫具體的原型類
public
class
prototypeclass1
implements
prototype
@override
public
void
dosome()
}------
----
----
----
----
----
----
----
----
----
-------
public
class
prototypeclass2
implements
prototype
@override
public
void
dosome()
}
之後就是我們的消費者
public
class
consumer
public
void
dosome()
}
測試
public
static
void
main
(string[
] args)
列印結果即是:
p2p1
這是乙個簡單的原型模式,當然還有複雜一點的登記原型模式
它多了乙個原型管理器(prototypemanager)角色,該角色的作用是:建立具體原型類的物件,並記錄每乙個被建立的物件。
這樣的話要給每個具體類乙個名字,在介面寫出get set抽象方法
public
inte***ce
prototype
具體類
public
class
prototypeclass1
implements
prototype
@override
public
void
dosome()
@override
public string getname()
@override
public
void
setname
(string name)}--
----
----
----
----
----
----
----
----
----
----
-------
public
class
prototypeclass2
implements
prototype
@override
public
void
dosome()
@override
public string getname()
@override
public
void
setname
(string name)
}
然後建立原型管理器,每建立過乙個乙個例項,就進行一次登記
public
class
prototypemanager
//登出方法
public
synchronized
static
void
removeprototype
(string id)
//獲取原型例項
public
synchronized
static prototype getprototype
(string id)
throws exception
else
}//因為原型管理器只提供靜態方法操作,不允許外部建立物件
private
prototypemanager()
}
測試:
public
static
void
main
(string[
] args)
throws exception
列印結果:
第三次我們已經登出了,再獲取丟擲我們寫好的異常
好了,原型模式就到這裡,純屬個人一點見解,如有誤區,望指正
還是要根據不同場景需求去選擇和修改
java設計模式之原型模式
定義 原型模式就是用原型例項指定建立物件的種類,並且通過複製這些原型建立新的物件。在應用程式中,有些物件比較複雜,其建立過程過於複雜,而且我們又需要頻繁的利用該物件,如果這個時候我們按照常規思維new該物件,那麼務必會造成資源浪費,這個時候我們就希望可以利用乙個已有的物件來不斷對他進行複製就好了,這...
設計模式之原型模式 java
原型模式 prototype 是一種建立型設計模式,原型模式允許乙個物件再建立另外乙個可定製的物件,根本無需知道任何如何建立的細節。工作原理是 通過將乙個原型物件傳給那個要發動建立的物件,這個要發動建立的物件通過請求原型物件拷貝它們自己來實施建立。原型類prototype宣告乙個轉殖方法,由具體原型...
Java設計模式 原型模式
原型模式是乙個建立型的模式。該模式有乙個樣板例項,使用者從這個樣板物件中複製出乙個內部屬性一致的物件,這個過程也就是俗稱的 轉殖 被複製的例項就是所稱的 原型 原型模式 用原型例項指定建立物件的種類,並通過拷貝這些原型建立新的物件 通過實現cloneable介面 public class wordd...