一、定義
通過給出一個原型對象來指明所要創建的對象的類型,然後用複製這個原型對象的方法創建出更多同類型的對象。原始模型模式允許動態的增加或減少產品類,產品類不需要非得有任何事先確定的等級結構,原始模型模式適用於任何的等級結構。缺點是每一個類都必須配備一個克隆方法。
二、結構圖
三、示例代碼
1、原型模式測試代碼Action.Java
/**
* 測試原型模式
* @author lattice
*
*/
public class Action {
public static void main(String[] args) {
String id="lattice";
ConcreteProtoType p1=new ConcreteProtoType(id);
ConcreteProtoType c1= (ConcreteProtoType) p1.cloneSelf();
System.out.println(c1.getId());
System.out.println(p1.equals(c1));
/**
* 輸出結果:
lattice
false
*/
}
}
2、原型類代碼ProtoType.java
/**
* 抽象原型類
* @author lattice
*
*/
public abstract class ProtoType {
private String id;
public ProtoType(String id){
this.id=id;
}
public String getId(){
return this.id;
}
public abstract ProtoType cloneSelf();
}
/**
* 具體原型類
* @author lattice
*
*/
class ConcreteProtoType extends ProtoType implements Cloneable{
public ConcreteProtoType(String id) {
super(id);
}
public ProtoType cloneSelf(){
try {
return (ProtoType) this.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}
/**
* 實現cloneable接口,並重寫clone方法,不然在一個未重寫cloneable接口的類對象調用clone方法時會
* 報:java.lang.CloneNotSupportedException
*/
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}