4.java設計模式-原型模式(prototype)

在《JAVA與模式》一書中開頭是這樣描述原型(Prototype)模式的:this

  原型模式屬於對象的建立模式。經過給出一個原型對象來指明全部建立的對象的類型,而後用複製這個原型對象的辦法建立出更多同類型的對象。這就是選型模式的用意。spa


1.原型模式的結構

  原型模式要求對象實現一個能夠「克隆」自身的接口,這樣就能夠經過複製一個實例對象自己來建立一個新的實例。這樣一來,經過原型實例建立新的對象,就再也不須要關心這個實例自己的類型,只要實現了克隆自身的方法,就能夠經過這個方法來獲取新的對象,而無須再去經過new來建立。prototype

原型模式有兩種表現形式:(1)簡單形式、(2)登記形式,這兩種表現形式僅僅是原型模式的不一樣實現。code

1.1 簡單形式的原型模式

 

這種形式涉及到三個角色:對象

(1)客戶(Client)角色:客戶類提出建立對象的請求。blog

(2)抽象原型(Prototype)角色:這是一個抽象角色,一般由一個Java接口或Java抽象類實現。此角色給出全部的具體原型類所需的接口。接口

(3)具體原型(Concrete Prototype)角色:被複制的對象。此角色須要實現抽象的原型角色所要求的接口。原型

源代碼:it

1.抽象原型角色:io

package com.itheima.pattern.prototype; public interface Prototype extends Cloneable{ /** * 克隆自身的方法 * @return 一個從自身克隆出來的對象 */
    public Object clone(); }

2.具體原型角色:

package com.itheima.pattern.prototype; public class ConcretePrototype1 implements Prototype { public Prototype clone() { //最簡單的克隆,新建一個自身對象,因爲沒有屬性就再也不復制值了
        Prototype prototype1 = new ConcretePrototype1(); return prototype1; } }
package com.itheima.pattern.prototype; public class ConcretePrototype2 implements Prototype { public Prototype clone() { Prototype prototype2=new ConcretePrototype2(); return prototype2; } }

客戶端角色:

package com.itheima.pattern.client; import com.itheima.pattern.prototype.Prototype; public class Client { /** * 持有須要使用的原型接口對象 */
    private Prototype prototype; /** * 構造方法,傳入須要使用的原型實現類對象 * @param prototype */
    public Client(Prototype prototype) { this.prototype=prototype; } public void operation() { Prototype copyPrototype = (Prototype) prototype.clone(); } }

2.登記形式的原型模式

     做爲原型模式的第二種形式,它多了一個原型管理器(PrototypeManager)角色,該角色的做用是:建立具體原型類的對象,並記錄每個被建立的對象。

     原型管理器角色保持一個彙集,做爲對全部原型對象的登記,這個角色提供必要的方法,供外界增長新的原型對象和取得已經登記過的原型對象。

相關文章
相關標籤/搜索