认识
原型模式在Java里的体现就是克隆,很单纯,具体干啥使呢,这么说吧,比如我有一毛钱,clone一下,变成两毛了。刚开始接触这个概念的时候,我拿小拇指头一想,存在的意义到底是什么?不在堆里边存?后来还是我片面了,看到它的应用场景,是的,是我格局小了。
应用场景
1.对象之间相同或相似,即只是个别的几个属性不同的时候。
2.创建对象成本较大,例如初始化时间长,占用CPU太多,或者占用网络资源太多等,需要优化资源。
3.创建一个对象需要繁琐的数据准备或访问权限等,需要提高性能或者提高安全性。
4.系统中大量使用该类对象,且各个调用者都需要给它的属性重新赋值。
噢,它考虑的是创建对象的成本。
在 Spring 中,原型模式应用的非常广泛,例如 scope=‘prototype’、JSON.parseObject() 等都是原型模式的具体应用。
实现
只要类实现Cloneable接口,就能c了。
public class CloneTest {
public static void main(String[] args) {
Son obj1=new Son();
Son obj2= null;
try {
obj2 = (Son)obj1.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
System.out.println("obj1==obj2?"+(obj1==obj2));
}
}
class Son implements Cloneable {
Son() {
System.out.println("具体原型创建成功!");
}
public Object clone() throws CloneNotSupportedException{
System.out.println("具体原型复制成功!");
return (Son)super.clone();
}
}
具体原型创建成功!
具体原型复制成功!
obj1==obj2?false