解决问题:
创建n个类似的对象就需要new n次,每次都重写set一大堆属性值,很麻烦。
Java已有一些工具类来进行JavaBean的copy。
如果没有工具类,而是让你自己弄呢?这就是原型模式。让需要被copy的对象里实现一个clone()。
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
原型模式结构图
浅引用:
对象中的引用类型属性只拷贝引用。拷贝对象和原对象共用一个相同的引用
深引用:
对象中的引用类型属性不拷贝引用,而是将次属性也物理拷贝。拷贝对象和原对象不共用一个相同的引用。
import lombok.Getter;
/**原型类*/
public abstract class Prototype {
@Getter
private String id;
public Prototype(String id) {
this.id = id;
}
//抽象类关键就是有一个这样的clone方法
public abstract Prototype clone();
}
import lombok.Data;
@Data
public class ConcretePrototype1 extends Prototype {
private String name;
private Integer sex;
public ConcretePrototype1(String id) {
super(id);
}
@Override
public Prototype clone() {
return (Prototype)this.memberWiseClone();
}
private ConcretePrototype1 memberWiseClone() {
ConcretePrototype1 cp = new ConcretePrototype1(super.getId());
cp.setName(name);
cp.setSex(sex);
return cp;
}
}
public class Client {
public static void main(String[] args) {
Prototype p0 = new ConcretePrototype1("007");
Prototype p1 = p0.clone();
Prototype p2 = p0.clone();
Prototype p3 = p0.clone();
}
}
网友评论