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