设计模式回顾之十三:原型模式(Prototype)

设计模式回顾系列文章:主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。

------------------------------------------------

原型模式(Prototype) 

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

适用于:

当要实例化的类是在运行时刻指定时,例如:通过动态装载,

或者为了避免创建一个与产品类层次平行的工厂类层次时,

或者当一个类的实例只能有几个不同状态组合中的一种时,

建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。

程序实现:

克隆接口:

public interface Prototype extends Cloneable{
    public Prototype clone() throws CloneNotSupportedException;
}

具体实现类:

public class ConcretePrototype implements Prototype{
	private String name;
	
	public ConcretePrototype(String name){
		this.name=name;
	}
	
	public Prototype clone() throws CloneNotSupportedException{
		return (Prototype)super.clone();
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

管理者:

public class PrototypeManager {
	private Prototype prototype;
	
	public void setPrototype(Prototype prototype){
		this.prototype=prototype;
	}
	
	public Prototype doClone() throws CloneNotSupportedException{
		return prototype.clone();
	}
}

客户端:

public static void main(String[] args) throws Exception{
		Prototype prototype = new ConcretePrototype("A ConcretePrototype!");
		PrototypeManager pm = new PrototypeManager();
		pm.setPrototype(prototype);
		ConcretePrototype cloneObj = (ConcretePrototype)pm.doClone();
		System.out.println(cloneObj.getName());
		System.out.println(cloneObj == prototype);
		System.out.println(cloneObj.equals(prototype));
}

关于潜复制和深复制:

潜复制:复制某对象中关联其它对象的引用。

深复制:将对象中关联的其它对象也复制一遍,复制后引用指向新复制后的对象。

举例:Jdk中的cloneable接口和clone方法。

相关推荐