原型模式
原型模式

使命
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。
优点
- 性能提高
- 逃避构造函数的约束
缺点
- 配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候
- 必须实现 Cloneable 接口
克隆羊多莉的故事,想必都听过了吧,原型模式其实主要思想就是实现 Cloneable 接口,实现实例对象的克隆,从而实现高效的对象创建,但是这个高效并不是所有效率都高于直接创建,当创建代价较大才采用这种方式会比较合适
绵羊
public class Sheep implements Cloneable {
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public Sheep(String name, int age) {
this.name = name;
this.age = age;
}
@Override
protected Object clone() {
Object o = null;
try {
o = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
@Override
public String toString() {
return "name:" + name + " age:" + age;
}
}
开始克隆
public static void main(String[] args) {
Sheep sheep = new Sheep("A", 3);
Sheep dolly = (Sheep) sheep.clone();
dolly.setName("Dolly");
dolly.setAge(1);
System.out.println(sheep);
System.out.println(dolly);
}

核心思想很简单,但是不要滥用这种方式来创建实例,优点缺点以及它要解决的目的掌握之后才能更好地使用这张牌