定义
原型模式是最后一种创建型模式,它采取复制原型对象的方法来创建对象的实例。
使用原型模式创建的实例都和原型具有同样的初始数据
主要角色:
客户端角色:Client提出创建对象的请求
抽象原型对象:Prototype 通常由一个抽象类或者一个接口来实现,定义一些接口规范
具体原型对象:被复制的具体对象,实现里抽象原型对象的接口方法
UML:
复制拷贝可分为深复制和浅复制
浅复制主要是复制基本数据类型和string
深复制主要是复制引用数据类型
// 抽象原型对象
package com.pattern.prototype;
public ConcreatePrototype impements Cloneable {
private String tips = null;
public void setTips(String tips){
this.tips = tips;
}
public String getTips(String tips){
return this.tips;
}
public ConcretePrototype clone(){
try{
return (ConcreatePrototype)super.clone();
}catch(CloneNotSupportedException ex){
}
}
}
// 客户端测试类
package com.pattern.prototype;
public class Client{
public static void main(String []args){
ConcreatePrototype cp = new ConcreatePrototype();
cp.setTips("浅复制例子");
ConcretePrototype cp2 = cp.clone();
System.out.println(cp2.getTips());
}
}
结果:
浅复制例子
这里采用java自带的Cloneable克隆接口来实现克隆
优点:
简化对象的创建,复制的过程直接在内存中操作二进制流,所以性能比较高
可以允许动态增加或者减少产品类,适合任何的产品等级结构
缺点:
每一个类都配有一个clone方法,而且进行深复制的时候代码量比较多
注意:
单例模式与原型模式是冲突的,原型模式下复制对象不会调用构造方法