91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中怎么實現原型模式

發布時間:2021-06-26 15:55:13 來源:億速云 閱讀:125 作者:Leah 欄目:移動開發

本篇文章給大家分享的是有關Android中怎么實現原型模式,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

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

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

Android中怎么實現原型模式
Intent的clone方法非常簡單:

@Override public Object clone() {      return new Intent(this);  }

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

public Intent(Intent o) {      this.mAction = o.mAction;      this.mData = o.mData;      this.mType = o.mType;      this.mPackage = o.mPackage;      this.mComponent = o.mComponent;      this.mFlags = o.mFlags;      //下面幾個是引用對象被重新創建了,是深拷貝      if (o.mCategories != null) {          this.mCategories = new HashSet<String>(o.mCategories);      }      if (o.mExtras != null) {          this.mExtras = new Bundle(o.mExtras);      }      if (o.mSourceBounds != null) {          this.mSourceBounds = new Rect(o.mSourceBounds);      }  }

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

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

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

以上就是Android中怎么實現原型模式,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浦北县| 西乌珠穆沁旗| 定兴县| 泰来县| 阿拉尔市| 临夏市| 华亭县| 涞源县| 大方县| 阳江市| 托克托县| 禄劝| 玉环县| 台南县| 沾化县| 和田市| 陈巴尔虎旗| 蒙自县| 新竹县| 虎林市| 临湘市| 台前县| 象州县| 垦利县| 闽清县| 黑河市| 城市| 邮箱| 云南省| 阳江市| 通辽市| 五家渠市| 财经| 兴义市| 大田县| 枞阳县| 临江市| 商洛市| 金华市| 广元市| 斗六市|