[设计模式]原型模式
生活随笔
收集整理的這篇文章主要介紹了
[设计模式]原型模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡介
原型模式 (Prototype)用原型實例指定創建對象的種類,并且通過拷貝這些原型創建新的對象。 原型模式是一種對象創建型模式?(可參考?設計模式 創建型模式)。
結構
圖-原型模式結構圖 Prototype:聲明一個克隆自身的接口。
ConcretePrototype:實現克隆自身的具體操作。
Client:調用 Prototype 來克隆自身,從而創建一個新對象。
動機
當要實例化的類是在運行時刻指定時,例如,通過動態裝載。
為了避免創建一個與產品類層次平行的工廠類層次時。
當一個類的實例只能有幾個不同狀態組合中的一種時。建立相應數目的原型并克隆它們可能比每次用合適的狀態手工實例化該類更方便一些。?
?
淺拷貝與深拷貝
淺拷貝是指當對象的字段值被復制時,字段引用的對象不會被復制。
例如:如果一個對象有一個指向字符串的字段,并且我們對該對象做了一個淺拷貝,那麼兩個對象將引用同一個字符串。
深拷貝是指當一個類擁有資源,當這個類的對象發生復制過程的時候,資源重新分配,這個過程就是深拷貝。
實例
原型模式主要用于對象的復制,它的核心是就是類圖中的原型類Prototype。Prototype類需要具備以下兩個條件:
代碼
class?Prototype?implements?Cloneable?{????public?Prototype?clone()?{
????????Prototype?prototype?=?null;
????????try?{
????????????prototype?=?(Prototype)super.clone();
????????}?catch?(CloneNotSupportedException?e)?{
????????????e.printStackTrace();
????????}
????????return?prototype;
????}
}
class?ConcretePrototype?extends?Prototype?{
????public?void?show()?{
????????System.out.println("原型模式實現類");
????}
}
public?class?PrototypePattern?{
????public?static?void?main(String[]?args)?{
????????ConcretePrototype?cp?=?new?ConcretePrototype();
????????for(int?i=0;?i<?10;?i++){??
????????????ConcretePrototype?clonecp?=?(ConcretePrototype)cp.clone();??
????????????clonecp.show();??
????????}??
????}
}
本文轉自靜默虛空博客園博客,原文鏈接:http://www.cnblogs.com/jingmoxukong/p/4218556.html,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的[设计模式]原型模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: thinkphp-add方法错误
- 下一篇: 6、Gerrit插件