日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

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

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

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些不支持拷貝或有循環援用的對象時,實現克隆可能也會很困難。




生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美日韩视频一区二区 | 亚洲视频在线免费观看 | 久久999免费视频 | 国产精品久久久久国产a级 91看污 | 成人区精品一区二区 | 最近的中文字幕在线看视频 | 国产在线二区 | 国产欧美精品在线 | 欧美日韩在线不卡 | 国产福利视频网站 | 欧美三级视频 | 欧产日产韩产国产精品 | 久久精品aaaaaa毛片 | 日韩欧美大片在线观看 | 亚洲成人高清 | 国产精品久久久久久a | 日韩av网址大全 | 欧美日韩国产在线观看 | 国产99久久九九精品 | 午夜精品久久久久久久久久蜜桃 | 男女在线免费视频 | 又黄又湿的网站 | 午夜伦情电午夜伦情电影如如视频 | www.亚洲免费 | 视频一区二区三区在线 | 一区二区在线视频 | 国产精品久久久久久久久久久不卡 | av免费在线网站 | 亚洲伦理一区二区 | 综合色婷婷一区二区亚洲欧美国产 | 中文字幕av网站 | 男人操女人视频网站 | 国产日韩av在线播放 | 91精品国产91久久综合桃花 | 久久久久久国产免费视网址 | 在线视频一区二区三区 | 日韩欧美在线一区二区三区 | 夜夜看人久看2022 | 99成人精品视频 | 国内在线视频 | 日韩欧美在线一区二区三区 |