類似「影之分身術」的東西,以「鳴人」為原型,複製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加顏色,加背景圖,加文字,加事件等等。...
深轉殖和淺轉殖 原型模式
標籤 空格分隔 設計模式 原型模式 將乙個物件作為原型,通過對其進行複製而轉殖出多個和原型類似的新例項.淺轉殖 被複製物件的所有基本變數都含有和原來變數完全相同的值,而其他所有的引用物件任然指向原來的物件.換言之,淺轉殖僅僅複製鎖考慮的物件,而不複製它所引用的物件.轉殖的深度僅僅到棧記憶體中.深轉殖...