多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > 設計模式(四) 原型模式(Prototype)

設計模式(四) 原型模式(Prototype)

來源:程序員人生   發布時間:2015-02-10 08:51:09 閱讀次數:3135次

1.定義

原型模式屬于1種創建型模式,與其他創建型模式不同,原型模式不是直接構造對象,而是通過復制1個已存在的實例返回新的實例。


2.適用性

為什么要拷貝而不直接生成?我的理解是有些時候直接構造實例花費比較大,比如在構造對象的時候需要做大量的數據庫查詢,這樣如果構造許多類似的對象還重復地查詢數據庫則開消很大,很沒效力。直接拷貝現有的實例,在需要情況下做1些小的修改會顯得高效許多。


3.結構


  • Prototype: 聲明1個克隆本身的接口
  • ConcretePrototype:實現1個克隆本身的操作
  • Client : 讓1個原型克隆本身從而創建1個新的對象

從上圖我們可以看出,原型模式中不管Prototype還是ConcretePrototype都提供有1個Clone()方法,方便拷貝本身返回新的實例。而Client類中注冊有1個Prototype對象,方便Client從prototype克隆對象。


4.舉例說明

Cookie定義了1個抽象的Prototype,ChocolateCookie和MilkCookie分別是ConcretePrototype,CookieManager是Client,ManageCookies是測試類。

Cookie.java:

package com.andy.designpattern.prototype; public class Cookie implements Cloneable { protected String name; public Cookie() { // TODO Auto-generated constructor stub name = "Cookie"; } @Override protected Object clone() throws CloneNotSupportedException { // TODO Auto-generated method stub return (Cookie)super.clone(); } public String getName() { return name; } }

ChocolateCookie.java:

package com.andy.designpattern.prototype; public class ChocolateCookie extends Cookie { public ChocolateCookie() { // TODO Auto-generated constructor stub this.name = "ChocolateCookie"; } @Override protected Object clone() throws CloneNotSupportedException { // TODO Auto-generated method stub return (ChocolateCookie)super.clone(); } }
MilkCookie.java:

package com.andy.designpattern.prototype; import java.util.jar.Attributes.Name; public class MilkCookie extends Cookie { public MilkCookie(){ this.name = "MilkCookie"; } @Override protected Object clone() throws CloneNotSupportedException { // TODO Auto-generated method stub return (MilkCookie)super.clone(); } }

CookieMachine.java:

package com.andy.designpattern.prototype; public class CookieMachine { private Cookie cookie; public Cookie makeCookie(Cookie cookie) throws CloneNotSupportedException{ return (Cookie)cookie.clone(); } }

ManageCookies.java:

package com.andy.designpattern.prototype; public class ManageCookies { public static void main(String[] args) { CookieMachine machine = new CookieMachine(); try { System.out.println(machine.makeCookie(new MilkCookie()).getName()); System.out.println(machine.makeCookie(new ChocolateCookie()).getName()); } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

5.效果

Prototype與Abstract Factory和Builder1樣,對用戶隱藏了產品類,減少了客戶知道的名字的數目。

優點:

  1. 可以再運行時刻增加和刪除產品,這1點使原型模式比其他的創建型模式更加靈活
  2. 減少子類的構造,有些時候可以節省很多資源
  3. 用類動態配置利用,1些運行時刻環境允許你動態將類裝在到利用中

缺點:

每個Prototype子類都必須實現Clone操作,有時候會有些困難。比如,當所斟酌的類已存在時就難以增加Clone操作;當內部包括1些不支持拷貝或有循環援用的對象時,實現克隆可能也會很困難。




生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 疯狂奶水freeseⅹ | free性欧美极度另类性性欧美 | 麻豆成人在线 | 国久久| 在线免费h| 日本久本草精品 | 亚洲精品国产精品国自产网站 | 亚洲人成网亚洲欧洲无码 | 国产一区亚洲一区 | 欧美亚洲高清日韩成人 | 欧美xxxx在线视频 | 中日韩一区二区三区 | 大片刺激免费播放视频 | 最近的中文字幕手机在线看免费 | 国产亚洲精品久久久久久无 | 国产视频h | 波多野结衣中文字幕视频 | 国产精品高清全国免费观看 | 欧美freesex呦交hd | 日本三级理论片 | 国产片欧美片亚洲片久久综合 | 在线免费成人网 | 国内国内在线精品视频 | 国产另类视频 | 视频在线免费看 | 欧美成人h版 | 亚洲在线免费观看 | 欧美成人久久久免费播放 | аⅴ天堂 在线8 | 中文字幕日韩欧美 | 亚洲欧美国产另类 | 免费中日高清无专码有限公司 | 中国精品视频 | 亚洲第一网站在线观看 | 欧美日韩在线一区二区三区 | 国产美女激情 | 亚洲十八精品网站 | 激情区小说区偷拍区图片区 | 视频一区国产 | 亚洲国产成人精品一区91 | 岛国片在线播放 |