成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android設計模式系列--原型模式

移動開發 Android
CV一族,應該很容易理解原型模式的原理,復制,粘貼完后看具體情況是否修改,其實這就是原型模式。

CV一族,應該很容易理解原型模式的原理,復制,粘貼完后看具體情況是否修改,其實這就是原型模式。
從java的角度看,一般使用原型模式有個明顯的特點,就是實現cloneable的clone()方法。
原型模式,能快速克隆出一個與已經存在對象類似的另外一個我們想要的新對象。

1.意圖
用原型實例指定創建對象的種類,并且通過拷貝這些原型創建新的對象。
熱門詞匯:克隆 深拷貝 淺拷貝

2.結構圖和代碼
它的結構圖非常簡單,我們以Intent為例子:


Intent的clone方法非常簡單:

  1. @Override 
  2. public Object clone() {  
  3.     return new Intent(this);  
  4. }  

返回一個新的Intent對象。
克隆操作分深拷貝和淺拷貝,淺拷貝說白了就是把原對象所有的值和引用直接賦給新對象。深拷貝則不僅把原對象的值賦給新對象,而且會把原對象的引用對象也重新創建一遍再賦給新對象。
我們具體分析一下Intent是淺拷貝還是深拷貝吧:

  1. public Intent(Intent o) {  
  2.     this.mAction = o.mAction;  
  3.     this.mData = o.mData;  
  4.     this.mType = o.mType;  
  5.     this.mPackage = o.mPackage;  
  6.     this.mComponent = o.mComponent;  
  7.     this.mFlags = o.mFlags;  
  8.     //下面幾個是引用對象被重新創建了,是深拷貝  
  9.     if (o.mCategories != null) {  
  10.         this.mCategories = new HashSet<String>(o.mCategories);  
  11.     }  
  12.     if (o.mExtras != null) {  
  13.         this.mExtras = new Bundle(o.mExtras);  
  14.     }  
  15.     if (o.mSourceBounds != null) {  
  16.         this.mSourceBounds = new Rect(o.mSourceBounds);  
  17.     }  
  18. }  

這里我們為什么Intent要重寫Object的clone方法,就與深拷貝有關。
其實我們查看Object的clone()方法源碼和注釋,默認的super.clone()用的就是淺拷貝:

  1. /**  
  2.  * Creates and returns a copy of this {@code Object}. The default  
  3.  * implementation returns a so-called "shallow" copy: It creates a new  
  4.  * instance of the same class and then copies the field values (including  
  5.  * object references) from this instance to the new instance. A "deep" copy,  
  6.  * in contrast, would also recursively clone nested objects. A subclass that  
  7.  * needs to implement this kind of cloning should call {@code super.clone()}  
  8.  * to create the new instance and then create deep copies of the nested,  
  9.  * mutable objects.  
  10.  */ 
  11. protected Object clone() throws CloneNotSupportedException {  
  12.     if (!(this instanceof Cloneable)) {  
  13.         throw new CloneNotSupportedException("Class doesn't implement Cloneable");  
  14.     }  
  15.   
  16.     return internalClone((Cloneable) this);  
  17. }  

這種形式屬于簡單形式的原型模式,如果需要創建的原型數目不固定,可以創建一個原型管理器,在復制原型對象之前,客戶端先在原型管理器中查看
是否存在滿足條件的原型對象,如果有,則直接使用,如果沒有,克隆一個,這種稱作登記形式的原型模式。
適用原型模式可以對客戶隱藏產品的具體類,因此減少了客戶知道的名字的數目,此外是客戶無需改變
原型模式的缺陷是每個原型的子類都必須實現Cloneable接口,這個實現起來有時候比較困難。

3.效果
(1).創建型模式
(2).運行時刻增加和刪除產品
(3).改變只以指定新對象(ctrl+v,然后修改)
(4).改變結構以指定新對象。(類似2,實現不同而已)
(5).減少子類的構造

責任編輯:張葉青 來源: 博客園
相關推薦

2020-10-21 14:29:15

原型模式

2021-10-28 19:09:09

模式原型Java

2021-05-18 08:52:31

Prototype 原型模式設計模式

2022-09-21 08:47:05

項目多線程對象

2013-11-26 15:48:53

Android設計模式SDK

2023-08-08 20:13:36

設計模式原型模式

2013-11-26 16:20:26

Android設計模式

2021-06-07 09:51:22

原型模式序列化

2013-11-26 17:15:13

Android設計模式

2020-06-08 08:04:49

設計模式結構型接口

2013-11-26 17:09:57

Android設計模式

2022-01-12 13:33:25

工廠模式設計

2013-11-26 16:29:22

Android設計模式

2013-11-26 16:39:21

Android設計模式

2020-11-04 08:54:54

狀態模式

2020-11-03 13:05:18

命令模式

2020-10-23 09:40:26

設計模式

2015-06-08 09:05:10

Java原型模式

2021-09-29 13:53:17

抽象工廠模式

2022-01-14 09:22:22

設計模式橋接
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕在线看第二 | 91精品国产乱码久久久久久久久 | 国产日韩一区二区三免费 | 日韩羞羞| 在线视频亚洲 | 久久激情视频 | 精品在线一区二区三区 | 国产精品高清一区二区三区 | 成人区一区二区三区 | 国产免费一区二区 | 免费国产一区 | 国产日韩精品一区 | 欧美性大战久久久久久久蜜臀 | 国产目拍亚洲精品99久久精品 | 成人h片在线观看 | 在线播放国产一区二区三区 | 天天爽夜夜爽精品视频婷婷 | 成人国产精品视频 | 欧美一级电影免费 | 日韩欧美一区二区三区四区 | 亚洲一区二区成人 | 婷婷色网 | 在线观看成人小视频 | 欧美成人精品一区二区三区 | 欧美日韩高清 | 干干干操操操 | 少妇黄色 | 在线观看中文字幕 | 国产视频久久 | 呦呦在线视频 | 91精品一区二区 | 精品免费 | 久久不卡 | 国产一区2区 | 国产伦精品一区二区三区在线 | 一区视频在线播放 | 久久这里只有精品首页 | 日日拍夜夜 | 国产一区二区电影 | 免费在线观看一区二区 | 欧美精品综合在线 |