設計模式7——Prototype設計模式

Prototype原型設計模式是指用原型實例指定建立對象的種類,而且經過拷貝這些原型來建立新的對象。Prototype原型模式容許一個對象再建立另一個可定製的對象,根本無需知道任何關於對象建立的細節。 java

原型模式的UML圖以下: 設計模式


Prototype模式例子以下: this

//抽象原型類	
abstract class Shape implements Colneable{
    String shapeName;
    public String getShapeName(){
	retun shapeName;
    }

    public void setShapeName(String shapeName){
        this.shapeName = shapeName;	
    }

    //實現了Colneable接口的類,能夠使用clone()方法複製對象
    public Object clone(){
	try{
	    return super.clone();
        }catch(CloneNotSupportedException e){
	    System.err.println(「此對象不支持複製」);
        }
        return null;
    }
}


//具體原型類
publc class Circle extends Shape{
    public Circle(){
	setShapeName(「Circle shape」);
    }

    public static void main(String[] args){
	Shape shape = new Circle();
	System.out.println(shape.getShapeName()); 
	//經過clone()方法得到一個對象拷貝
	Shape shape2 = (Shape)shape.clone();
	System.out.println(shape2.getShapeName());
    }
}


clone()方法是在Object中定義的,並且是protected的,只有實現了Cloneable接口的類才能夠在其實例上調用clone()方法,不然會拋出CloneNotSupportException。 spa

爲了獲取對象的一份拷貝,咱們能夠利用Object類的clone()方法,也能夠實現Cloneable接口,覆蓋基類的clone()方法,在clone()方法中,調用super.clone()。 .net

Cloneable接口是一個標記接口,也就是沒有任何內容,定義以下:
package java.lang;
pubilc interface Cloneable{
}

更多有關java拷貝方面的內容請參考http://blog.csdn.net/chjttony/article/details/7477346 設計

克隆只是實現Prototype原型模式的一種方法,也能夠直接經過new對象的方式建立原型實例,兩者區別在於: code

(1).經過new方式建立的原型和現存的實例對象沒有任何聯繫。 對象

(2).經過克隆方法建立的原型,雖然也是建立新對象,可是將原型實例對象的數據複製到了新的對象中,至關於使用被克隆對象的數據做爲克隆對象的初始數據。 blog

Prototype原型設計模式和Singleton單類設計模式是相對的,單類模式中,在整個程序生命週期裏,單類模式類的實例對象只有一個。而Prototype原型設計模式則正好相反,每次都返回的是原型類的不一樣實例對象。 接口

JDK中原型模式的應用:

java.lang.Object#clone()

java.lang.Cloneable

相關文章
相關標籤/搜索