真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android中怎么實(shí)現(xiàn)原型模式

本篇文章給大家分享的是有關(guān)Android中怎么實(shí)現(xiàn)原型模式,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

創(chuàng)新互聯(lián)專注于永興網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供永興營(yíng)銷型網(wǎng)站建設(shè),永興網(wǎng)站制作、永興網(wǎng)頁(yè)設(shè)計(jì)、永興網(wǎng)站官網(wǎng)定制、重慶小程序開(kāi)發(fā)服務(wù),打造永興網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供永興網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

1.意圖
用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過(guò)拷貝這些原型創(chuàng)建新的對(duì)象。
熱門(mén)詞匯:克隆 深拷貝淺拷貝

2.結(jié)構(gòu)圖和代碼
它的結(jié)構(gòu)圖非常簡(jiǎn)單,我們以Intent為例子:

Android中怎么實(shí)現(xiàn)原型模式
Intent的clone方法非常簡(jiǎn)單:

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

返回一個(gè)新的Intent對(duì)象。
克隆操作分深拷貝和淺拷貝,淺拷貝說(shuō)白了就是把原對(duì)象所有的值和引用直接賦給新對(duì)象。深拷貝則不僅把原對(duì)象的值賦給新對(duì)象,而且會(huì)把原對(duì)象的引用對(duì)象也重新創(chuàng)建一遍再賦給新對(duì)象。
我們具體分析一下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;      //下面幾個(gè)是引用對(duì)象被重新創(chuàng)建了,是深拷貝      if (o.mCategories != null) {          this.mCategories = new HashSet(o.mCategories);      }      if (o.mExtras != null) {          this.mExtras = new Bundle(o.mExtras);      }      if (o.mSourceBounds != null) {          this.mSourceBounds = new Rect(o.mSourceBounds);      }  }

這里我們?yōu)槭裁碔ntent要重寫(xiě)Object的clone方法,就與深拷貝有關(guān)。
其實(shí)我們查看Object的clone()方法源碼和注釋,默認(rèn)的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);  }

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

以上就是Android中怎么實(shí)現(xiàn)原型模式,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)頁(yè)題目:Android中怎么實(shí)現(xiàn)原型模式
文章鏈接:http://weahome.cn/article/piehhe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部