一、定义
通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。
二、结构图
三、示例代码
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();
}
}