設(shè)計模式之原型模式

原型模式:用原型對象指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象。其實原型對象就是從一個對象再創(chuàng)建另外一個可定制的對象,而且無需知道任何創(chuàng)建的細節(jié)。

大致組成如下:

抽象的原型對象

通常是一個實現(xiàn)類了能克隆自身的抽象類或者接口。

具體原型對象

實現(xiàn)一個克隆自身的操作的對象

具體實現(xiàn)如下:

抽象原型對象

package prototype;

/**

* Created by canon on 2018/11/26.

*/

public abstract class Prototype implements Cloneable{

? ?public Prototype clone()

? ?{

? ? ? ?Prototype prototype = null;

? ? ? ?try

? ? ? ?{

? ? ? ? ? ?prototype = (Prototype)super.clone();

? ? ? ?}

? ? ? ?catch (CloneNotSupportedException e)

? ? ? ?{

? ? ? ? ? ?e.printStackTrace();

? ? ? ?}

? ? ? ?return prototype;

? ?}

? ?public abstract void display();

}

具體原型對象

package prototype;

/**

* Created by canon on 2018/11/26.

*/

public class ConcretePrototype extends Prototype {

? ?@Override

? ?public void display() {

? ? ? ?System.out.println("原型模式之復(fù)制");

? ?}

}

客戶端調(diào)用

package controller;

import prototype.ConcretePrototype;

import prototype.Prototype;

/**

* Created by canon on 2018/11/26.

*/

public class PrototypeDesignPattern {

? ?public static void main(String[] args) {

? ? ? ?ConcretePrototype concretePrototype = new ConcretePrototype();

? ? ? ?Prototype prototypeA = concretePrototype.clone();

? ? ? ?prototypeA.display();

? ? ? ?Prototype prototypeB = concretePrototype.clone();

? ? ? ?prototypeB.display();

? ?}

}

客戶端輸出

原型模式之復(fù)制

原型模式之復(fù)制

Process finished with exit code 0

以上就是具體的實現(xiàn),當(dāng)然這僅僅只是簡單的淺復(fù)制的克隆,對于值引用的復(fù)制沒有任何問題,但是對于引用對象的復(fù)制會出現(xiàn)問題,具體解決方法可以通過深度克隆的方式去解決。原型模式用于創(chuàng)建重復(fù)的對象,同時又能保證性能。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的很好的方式。

優(yōu)點: 1、性能提高。 2、逃避構(gòu)造函數(shù)的約束。

缺點: 1、配備克隆方法需要對類的功能進行通盤考慮,這對于全新的類不是很難,但對于已有的類不一定很容易,特別當(dāng)一個類引用不支持串行化的間接對象,或者引用含有循環(huán)結(jié)構(gòu)的時候。 2、必須實現(xiàn) Cloneable 接口。

使用場景: 1、資源優(yōu)化場景。 2、類初始化需要消化非常多的資源,這個資源包括數(shù)據(jù)、硬件資源等。 3、性能和安全要求的場景。 4、通過 new 產(chǎn)生一個對象需要非常繁瑣的數(shù)據(jù)準(zhǔn)備或訪問權(quán)限,則可以使用原型模式。 5、一個對象多個修改者的場景。 6、一個對象需要提供給其他對象訪問,而且各個調(diào)用者可能都需要修改其值時,可以考慮使用原型模式拷貝多個對象供調(diào)用者使用。 7、在實際項目中,原型模式很少單獨出現(xiàn),一般是和工廠方法模式一起出現(xiàn),通過 clone 的方法創(chuàng)建一個對象,然后由工廠方法提供給調(diào)用者。原型模式已經(jīng)與 Java 融為渾然一體,大家可以隨手拿來使用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容