设计模式——原型模式
個人在CSDN上的BLOG:http://blog.csdn.net/feb13/article/details/7851293
以下是讀《設計模式——可復用面向對象軟件的基礎》的讀書筆記。
PROTOTYPE 原型
?
1、 意圖
用原型實例指定創建對象的種類,并且通過拷貝這些原型創建新的對象。
2、 適用性
- 當一個系統應該獨立于它的產品創建、構成、表示時,要使用Prototype模式;
- 當要實例化的類是在運行時刻制定時。例如,通過動態裝載;
- 為了避免創建一個與產品類層次平行的工廠類層次時;
- ?當一個類的實例只能有幾個不同狀態組合中的一種時。
3、 結構
4、 參與者
Prototype
??????????????????? ——聲明一個克隆自身的接口。
ConcretePrototype
??????????????????? ——實現一個克隆自身的操作。
Client
??????????????????? ——讓一個原型克隆自身從而創建一個新的對象。
5、 協作
客戶請求一個原型克隆自身。
6、 效果
Prototype有許多和Abstract Factory和Builder一樣的效果:它對客戶隱藏了具體的產品類,因此減少了客戶知道的名字的數目。此外,這些模式使客戶無需改變即可使用與特定應用相關的類。
Property還有以下優點:
1)運行時刻增加和刪除產品????????????????? Prototype允許只通過客戶注冊原型實例就可以將一個新的具體產品類并入系統。它比其他創建型模式更靈活,因為客戶可以在運行時刻建立和刪除原型。
2)改變值以指定新對象????????????????? 高度動態的系統允許你通過對象復合定義新的行為。
3)改變結構以指定新對象????????????
4)減少子類的構造????????????????? Factory Method經常產生一個與產品類層次平行的Creator類層次。Prototype模式使得你克隆一個原型而不是請求一個工廠方法去產生一個新的對象。因此你根本不需要Creator類層次。
5)用動態類配置應用???????????? 一些運行時刻環境允許你動態將類裝載到應用中。一個希望創建動態載入類的實例的應用不能靜態引用類的構造器。而應該由運行環境在載入時自動創建每個類的實例,并用原型管理器來注冊這個實例。
Prototype的主要缺陷是每一個Prototype的子類都必須實現Clone()操作,這可能很困難。例如,當所考慮的類已經存在時就難以新增Clone操作。當內部包括一些不支持拷貝或有循環引用的對象時,實現克隆可能也會很難。
7、 實現
實現原型時,要考慮下面問題:
1)使用一個原型管理器??????? 當一個系統中原型數目不固定時(也就是說,它們可以動態創建和銷毀),要保持一個可用原型的注冊表。客戶不會自己來管理原型,但會在注冊表中存儲和檢索原型。客戶在克隆一個原型前會向注冊表請求該原型。
2)實現克隆操作???????????? Prototype模式最困難的部分在于正確實現clone操作。當對象結構包含循環引用時,這尤為棘手。克隆一個結構復雜的原型通常需要深拷貝,因為復制對象和原對象必須相互獨立。
3)初始化克隆對象???????
8、 代碼示例
Prototype
package com.examples.pattern.prototype;publicclass Prototype implements Cloneable {private String name;public String getName() {returnname;}publicvoid setName(String name) {this.name = name;}public Object clone(){try {returnsuper.clone();} catch (CloneNotSupportedException e) {e.printStackTrace();returnnull;}} } ConcretePrototypepackage com.examples.pattern.prototype;publicclass ConcretePrototype extends Prototype {public ConcretePrototype(String name) {setName(name);}}
Client
package com.examples.pattern.prototype;publicclass Client {publicstaticvoid main(String[] args) {Prototype pro = new ConcretePrototype("prototype");Prototype pro2 = (Prototype) pro.clone();System.out.println(pro.getName());System.out.println(pro2.getName());}}9、 相關模式
Prototype和Abstract Factory模式在某種方面是相互競爭的。但是它們也可以一起使用。Abstract Factory可以存儲一個被克隆的原型的集合,并且返回產品對象。
大量使用Composite和Decorator模式的設計通常也可以從Prototype模式處獲益。
?
轉載于:https://blog.51cto.com/guanzhenxing/973003
總結
以上是生活随笔為你收集整理的设计模式——原型模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C++】考虑virtual函数以外的其
- 下一篇: 一起谈.NET技术,WPF 基础到企业应