日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式——原型模式

發布時間:2023/12/19 asp.net 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式——原型模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

個人在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;}} } ConcretePrototype
package 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

總結

以上是生活随笔為你收集整理的设计模式——原型模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。