日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

詳解JAVA 原型模式

瀏覽:20日期:2022-08-30 11:25:46

原型模式

原型模式(Prototype Pattern)是用于創(chuàng)建重復(fù)的對象,同時(shí)又能保證性能。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。

這種模式是實(shí)現(xiàn)了一個(gè)原型接口,該接口用于創(chuàng)建當(dāng)前對象的克隆。當(dāng)直接創(chuàng)建對象的代價(jià)比較大時(shí),則采用這種模式。例如,一個(gè)對象需要在一個(gè)高代價(jià)的數(shù)據(jù)庫操作之后被創(chuàng)建。我們可以緩存該對象,在下一個(gè)請求時(shí)返回它的克隆,在需要的時(shí)候更新數(shù)據(jù)庫,以此來減少數(shù)據(jù)庫調(diào)用。

介紹

意圖:

用原型實(shí)例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象。

主要解決:

在運(yùn)行期建立和刪除原型。

何時(shí)使用:

1、當(dāng)一個(gè)系統(tǒng)應(yīng)該獨(dú)立于它的產(chǎn)品創(chuàng)建,構(gòu)成和表示時(shí)。

2、當(dāng)要實(shí)例化的類是在運(yùn)行時(shí)刻指定時(shí),例如,通過動(dòng)態(tài)裝載。

3、為了避免創(chuàng)建一個(gè)與產(chǎn)品類層次平行的工廠類層次時(shí)。

4、當(dāng)一個(gè)類的實(shí)例只能有幾個(gè)不同狀態(tài)組合中的一種時(shí)。建立相應(yīng)數(shù)目的原型并克隆它們可能比每次用合適的狀態(tài)手工實(shí)例化該類更方便一些。

如何解決:

利用已有的一個(gè)原型對象,快速地生成和原型對象一樣的實(shí)例。

關(guān)鍵代碼:

1、實(shí)現(xiàn)克隆操作,在 JAVA 繼承 Cloneable,重寫 clone(),在 .NET 中可以使用 Object 類的 MemberwiseClone() 方法來實(shí)現(xiàn)對象的淺拷貝或通過序列化的方式來實(shí)現(xiàn)深拷貝。

2、原型模式同樣用于隔離類對象的使用者和具體類型(易變類)之間的耦合關(guān)系,它同樣要求這些'易變類'擁有穩(wěn)定的接口。

應(yīng)用實(shí)例:

1、細(xì)胞分裂。

2、JAVA 中的 Object clone() 方法。

優(yōu)點(diǎn):

1、性能提高。

2、逃避構(gòu)造函數(shù)的約束。

缺點(diǎn):

1、配備克隆方法需要對類的功能進(jìn)行通盤考慮,這對于全新的類不是很難,但對于已有的類不一定很容易,特別當(dāng)一個(gè)類引用不支持串行化的間接對象,或者引用含有循環(huán)結(jié)構(gòu)的時(shí)候。

2、必須實(shí)現(xiàn) Cloneable 接口。

使用場景:

1、資源優(yōu)化場景。

2、類初始化需要消化非常多的資源,這個(gè)資源包括數(shù)據(jù)、硬件資源等。

3、性能和安全要求的場景。

4、通過 new 產(chǎn)生一個(gè)對象需要非常繁瑣的數(shù)據(jù)準(zhǔn)備或訪問權(quán)限,則可以使用原型模式。

5、一個(gè)對象多個(gè)修改者的場景。

6、一個(gè)對象需要提供給其他對象訪問,而且各個(gè)調(diào)用者可能都需要修改其值時(shí),可以考慮使用原型模式拷貝多個(gè)對象供調(diào)用者使用。

7、在實(shí)際項(xiàng)目中,原型模式很少單獨(dú)出現(xiàn),一般是和工廠方法模式一起出現(xiàn),通過 clone 的方法創(chuàng)建一個(gè)對象,然后由工廠方法提供給調(diào)用者。原型模式已經(jīng)與 Java 融為渾然一體,大家可以隨手拿來使用。

注意事項(xiàng):

與通過對一個(gè)類進(jìn)行實(shí)例化來構(gòu)造新對象不同的是,原型模式是通過拷貝一個(gè)現(xiàn)有對象生成新對象的。淺拷貝實(shí)現(xiàn) Cloneable,重寫,深拷貝是通過實(shí)現(xiàn) Serializable 讀取二進(jìn)制流。

實(shí)現(xiàn)

我們將創(chuàng)建一個(gè)抽象類 Shape 和擴(kuò)展了 Shape 類的實(shí)體類。下一步是定義類 ShapeCache,該類把 shape 對象存儲在一個(gè) Hashtable 中,并在請求的時(shí)候返回它們的克隆。

PrototypePatternDemo,我們的演示類使用 ShapeCache 類來獲取 Shape 對象。

詳解JAVA 原型模式

步驟 1

創(chuàng)建一個(gè)實(shí)現(xiàn)了 Cloneable 接口的抽象類。

public abstract class Shape implements Cloneable { private String id; protected String type; abstract void draw(); public String getType(){ return type; } public String getId() { return id; } public void setId(String id) { this.id = id; } public Object clone() { Object clone = null; try { clone = super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return clone; }}

步驟 2

創(chuàng)建擴(kuò)展了上面抽象類的實(shí)體類。

public class Rectangle extends Shape { public Rectangle(){ type = 'Rectangle'; } @Override public void draw() { System.out.println('Inside Rectangle::draw() method.'); }}

public class Square extends Shape { public Square(){ type = 'Square'; } @Override public void draw() { System.out.println('Inside Square::draw() method.'); }}

public class Circle extends Shape { public Circle(){ type = 'Circle'; } @Override public void draw() { System.out.println('Inside Circle::draw() method.'); }}

步驟 3

創(chuàng)建一個(gè)類,從數(shù)據(jù)庫獲取實(shí)體類,并把它們存儲在一個(gè) Hashtable 中。

import java.util.Hashtable; public class ShapeCache { private static Hashtable<String, Shape> shapeMap = new Hashtable<String, Shape>(); public static Shape getShape(String shapeId) { Shape cachedShape = shapeMap.get(shapeId); return (Shape) cachedShape.clone(); } // 對每種形狀都運(yùn)行數(shù)據(jù)庫查詢,并創(chuàng)建該形狀 // shapeMap.put(shapeKey, shape); // 例如,我們要添加三種形狀 public static void loadCache() { Circle circle = new Circle(); circle.setId('1'); shapeMap.put(circle.getId(),circle); Square square = new Square(); square.setId('2'); shapeMap.put(square.getId(),square); Rectangle rectangle = new Rectangle(); rectangle.setId('3'); shapeMap.put(rectangle.getId(),rectangle); }}

步驟 4

PrototypePatternDemo 使用 ShapeCache 類來獲取存儲在 Hashtable 中的形狀的克隆。

public class PrototypePatternDemo { public static void main(String[] args) { ShapeCache.loadCache(); Shape clonedShape = (Shape) ShapeCache.getShape('1'); System.out.println('Shape : ' + clonedShape.getType());Shape clonedShape2 = (Shape) ShapeCache.getShape('2'); System.out.println('Shape : ' + clonedShape2.getType());Shape clonedShape3 = (Shape) ShapeCache.getShape('3'); System.out.println('Shape : ' + clonedShape3.getType()); }}

步驟 5

執(zhí)行程序,輸出結(jié)果:

Shape : CircleShape : SquareShape : Rectangle

以上就是詳解JAVA 原型模式的詳細(xì)內(nèi)容,更多關(guān)于JAVA 原型模式的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久中文视频| 欧美日韩国产在线观看网站 | 99久久婷婷| 国内亚洲精品| 欧美午夜不卡| av中文资源在线资源免费观看| 精品美女久久| 日韩在线精品| 亚洲欧美日韩国产综合精品二区| 国产一区观看| 五月精品视频| 亚洲欧美日韩一区在线观看| 在线一区二区三区视频| 午夜精品福利影院| 亚洲无线观看| 久久av日韩| 国产一区国产二区国产三区| 国产精品视频3p| 欧美成人一二区| 久久婷婷亚洲| 日韩av二区在线播放| 久久亚洲人体| 激情欧美丁香| 婷婷五月色综合香五月| 麻豆mv在线观看| 午夜欧美在线| 欧美日韩一区二区三区不卡视频| 久久精品亚洲一区二区| 欧美日韩免费看片| 日韩毛片视频| 蜜臀久久99精品久久一区二区| 亚洲女同一区| 男人操女人的视频在线观看欧美| 狠狠色综合网| 人人爽香蕉精品| 最新亚洲激情| 亚洲综合激情在线| 91成人精品观看| 久久精品伊人| 亚洲91精品| 综合国产视频| 久久精品国产亚洲一区二区三区| sm久久捆绑调教精品一区| 亚洲女同av| 婷婷成人基地| 亚洲精品在线二区| 国产精品二区影院| av日韩中文| 日韩在线看片| 在线 亚洲欧美在线综合一区| 亚洲精品极品| 亚州欧美在线| 国产精品极品| 精品网站999| 不卡av一区二区| 欧美日韩va| 欧美香蕉视频| 日韩中文字幕麻豆| 国产精品s色| 亚洲高清久久| 奇米亚洲欧美| 蜜桃视频在线网站| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美在线看片| 欧美成人精品三级网站| 久久久久亚洲| 婷婷综合成人| 亚洲精品永久免费视频| 亚洲欧美日本国产专区一区| 国产精品极品在线观看| 色爱综合av| 日韩精品成人在线观看| 欧美韩日一区| 日韩激情综合| 日韩精品第一区| 久久久久久久久成人| 午夜在线精品偷拍| 另类中文字幕国产精品| 国产精品mm| 午夜在线一区| 国产精品99一区二区三| 久久亚洲色图| 91精品在线观看国产| 精品国产麻豆| 日韩成人av影视| 久久aⅴ国产紧身牛仔裤| 在线手机中文字幕| 91成人在线网站| 日韩国产精品久久久久久亚洲| 国精品一区二区三区| 久草免费在线视频| 国产一区三区在线播放| 久久国内精品视频| 日本午夜精品久久久| 亚洲丝袜美腿一区| 蜜臀久久99精品久久一区二区| 日韩精品永久网址| 你懂的网址国产 欧美| 国产精品美女| 亚洲经典在线| 午夜精品成人av| аⅴ资源天堂资源库在线| 美日韩一区二区三区| 日本免费一区二区视频| 亚洲精品黄色| 亚洲女人av| 亚洲综合欧美| 亚洲精品自拍| 蜜桃视频一区二区三区| 亚州精品视频| 99成人在线| 午夜欧美视频| 麻豆精品91| 五月婷婷亚洲| 日韩在线精品| 国产一区二区三区四区| 国产精品第一国产精品| 国产日韩精品视频一区二区三区| 日韩精品一区二区三区中文在线 | 一区二区电影| 亚洲一区二区日韩| 欧美久久一区二区三区| 日韩av一区二| 亚洲欧洲日韩精品在线| 日本成人在线一区| 亚洲欧美久久精品| 久久av日韩| 久久影视三级福利片| 精品久久91| 99久久久久国产精品| 99热精品久久| 蜜桃av一区二区在线观看| 色8久久久久| 国产激情精品一区二区三区| 成人三级高清视频在线看| 日韩中文影院| 亚洲毛片在线| 国产欧美88| 国产一区二区精品久| 九九久久婷婷| 亚洲精品乱码| 高清av一区| 日韩精品一区二区三区免费观影| 亚洲国产专区| 日本中文字幕不卡| 激情综合五月| 三级欧美韩日大片在线看| 911精品国产| 国产精品自在| 免费观看久久av| 日韩影片在线观看| 日韩精品永久网址| 六月婷婷一区| 中文字幕一区二区三区日韩精品| 久久亚洲黄色| 免费av一区| 国产精品99久久免费观看| 久久毛片亚洲| 中文字幕一区二区三区日韩精品 | 国产福利一区二区精品秒拍| 成人在线免费观看网站| 日韩高清中文字幕一区二区| 亚洲激情社区| 韩日一区二区三区| 国产精品一站二站| 捆绑调教美女网站视频一区 | 久久av超碰| 黄色av一区| 毛片在线网站| 一区二区电影在线观看| 国产精品成人a在线观看| 综合激情网站| 高清一区二区| 国产亚洲高清在线观看| 久久精品中文| 男女男精品视频网| 成人三级高清视频在线看| 久久性天堂网| 国产一区亚洲| 麻豆精品国产91久久久久久| 亚洲欧美久久| 久久精品国产亚洲夜色av网站 | 日韩精品欧美精品| 久久久一二三| 久久精品99久久久| 中文字幕一区二区av| se01亚洲视频| 欧美a一区二区| 亚洲一区二区三区四区五区午夜| 国产精品videossex久久发布| 免费看欧美美女黄的网站| 成人亚洲一区| 国产欧美日韩精品一区二区免费| 免费人成网站在线观看欧美高清| 国产精品蜜芽在线观看| 久久超碰99| 日韩国产欧美在线视频| 在线综合亚洲| 激情综合亚洲| 日韩一区二区在线免费|