七 原型模式(深淺轉殖)

2021-06-18 08:00:32 字數 1829 閱讀 5292

類似「影之分身術」的東西,以「鳴人」為原型,複製1000份出來,群毆之……

在初始化資訊不發生變化的情況下,轉殖是最好的辦法。既隱藏了物件建立的細節,又對效能大大的提高——不用重新初始化物件,而是動態地獲得物件執行時的狀態。

——摘自《大話設計模式》

提到原型模式,就不得不提深淺轉殖。兩者都是完成對原型的複製,而區別在於對其引用物件的複製情況:

淺複製:僅僅複製原型,而對其他物件的引用仍指向原有物件,即不複製原型的引用物件。

深複製:把原型和原型的引用物件都複製了一遍。

一、淺複製

以簡歷複製為例,進行**演示

①、原型#########################################

/**

* 原型,個人簡歷,實現cloneable介面

*/public class resume implements cloneable

//設定個人資訊

public void setpersonalinfo(character ***,integer age)

//設計工作經歷

public void setworkexperience(string timearea,string company)

public void display()

@override

public object clone() catch (exception e)

return ob;

}}

②、原型的引用類#########################################

/**

* 工作簡歷

*/public class workexperience

public void settimearea(string timearea)

public string getcompany()

public void setcompany(string company)

}

測試方法:

public class test 

}

執行結果為:

ps:並沒有達到預期的效果,把第乙份簡歷的工作經驗也修改了

二、深複製

例項以序列化的方式進行深複製,需實現serializable介面:

①、原型#########################################

/**

* 原型,個人簡歷,實現cloneable,serializable介面

*/public class resume implements cloneable,serializable catch (exception e)

return null;

}}

②、原型的引用類#########################################

/**

* 工作簡歷,實現serializable介面

*/public class workexperience implements serializable

再次呼叫測試方法,執行結果為:

ps:達到預期的效果,單獨修改第二份簡歷工作經驗

原型模式(轉殖模式)

轉殖模式最突出的優點就是,不用建立新的物件,省時間,效率高。適合需要一下子新建很多類的情況 轉殖模式分為兩種,淺轉殖和深轉殖 實現 cloneable可以實現轉殖 淺轉殖就是不能轉殖物件屬性,兩者公用乙個物件屬性位址 字串比較特殊,是不可改變物件,所以可以不看做物件 public class she...

原型模式(物件的轉殖)

原型模式 屬於物件的建立模式 通過給出乙個原型物件 來指明所有建立的物件的型別 然後用這個原型物件 提供的複製辦法 建立出更多同型別 的物件。聯想到瀏覽器中,如果我們生成了乙個button例項,這個button例項經過一系列操作,攜帶了各種資訊,比如button加顏色,加背景圖,加文字,加事件等等。...

深轉殖和淺轉殖 原型模式

標籤 空格分隔 設計模式 原型模式 將乙個物件作為原型,通過對其進行複製而轉殖出多個和原型類似的新例項.淺轉殖 被複製物件的所有基本變數都含有和原來變數完全相同的值,而其他所有的引用物件任然指向原來的物件.換言之,淺轉殖僅僅複製鎖考慮的物件,而不複製它所引用的物件.轉殖的深度僅僅到棧記憶體中.深轉殖...