介绍
原型模式主要解决的问题就是创建重复对象,这里的对象通常指的是一些通过繁琐的操作才能创建出来的重对象。对于一些普通的轻对象,new的效率比使用原型模式的效率要高
示例
需要拷贝的原型类必须实现"java.lang.Cloneable"接口,然后重写Object类中的clone方法,从而才可以实现类的拷贝。
//商店
public class Shop implements Cloneable {
//商店名
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
protected Object clone() {
Shop shop = null;
try {
shop = (Shop) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return shop;
}
使用
public static void main(String[] args) {
Shop shop = new Shop();
shop.setName("百货超市");
//copy
Shop clone = (Shop) shop.clone();
}
浅拷贝和深拷贝
- 浅拷贝:对于要克隆的对象,只会对对象中的基础数据类型属性进行克隆,而非基础数据类型属性只会复制一份引用给到克隆出来的对象,让克隆出来的对象的非基础数据类型属性指向原生对象的内部元素地址,这种拷贝叫做浅拷贝。
- 深拷贝:对于要克隆的对象,在
clone()时也要把非基础数据类型属性进行拷贝,实现每个克隆出来的对象的非基础数据类型属性都是独立的,互不相干的,这种拷贝叫做深拷贝。
总结
- 通过原型模式可以简化创建重量级对象的过程,并提高程序的效率。
- 原型设计模式是动态获取对象运行时的状态进行创建对象的。
- 原型模式是比较适合重对象的克隆而并不太适合轻对象