原型模式:(对象克隆,每次都是新的对象,单例模式返回唯一对象)
原型实例指定创建对象的种类,并且通过拷贝原型创建新的对象
角色
- 抽象原型类:定义具有克隆自己的方法的接口
- 具体原型类:实现克隆方法
- 客户类:克隆生成一个新的对象
抽象原型类:AbstractPrototype
public abstract class AbstractPrototype{ private String str; public AbstractPrototype(String str){ this.str=str; } public String getStr(){ return str; } public void show(){ System.out.println(str); } /** * 提供克隆自身的方法,实现对象的创建 * @return */ public abstract AbstractPrototype createPrototypeObject();}
具体原型类:ConcretePrototype
public class ConcretePrototype extends AbstractPrototype implements Cloneable{ public ConcretePrototype(String str) { super(str); } /** * 克隆的具体实现方法:浅度复制(只复制属性,不复制其引用的对象) */ @Override public AbstractPrototype createPrototypeObject(){ ConcretePrototype cp = null; try{ cp =(ConcretePrototype) super.clone(); //Java RTTI机制 }catch (Exception e) { e.printStackTrace(); } return cp; }}
测试代码:
//浅复制:只复制对象内容本身,不涉及到关联对象(元对象和拷贝对象的引用指向同一个对象)AbstractPrototype ap = new ConcretePrototype("Hello");ap.show();AbstractPrototype ap1 = ap.createPrototypeObject();ap1.show();