设计模式-原型模式
程序员文章站
2022-06-12 20:23:19
...
Specify the kinds of objects to create using a prototypcal instance, and create new
objects by copying this prototype.
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
原型模式的核心是一个clone 方法,通过该方法进行对象的拷贝,Java提供一个Cloneable 接口
来标示这个对象是可以拷贝的。
public class PrototypeClass implements Cloneable {
@Override
public PrototypeClass clone() {
PrototypeClass prototypeClass = null;
try {
prototypeClass = (PrototypeClass) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return prototypeClass;
}
}
原型模式的优点
(1)性能优良 原型模式是内存二进制的拷贝,要比直接new 一个对象性能好很多,特别是要在
一个循环体内产生大量的对象时,原型模式可以更好地体现其优点。
(2)逃避构造函数的约束
原型模式的使用场景
(1)资源优化场景 类初始化需要消耗非常多的资源。
(2)性能和安全要求的场景 通过new 产生一个对象需要非常繁琐的数据准备或访问权限,则可
以使用。
(3)一个对象多个修改者的场景 一个对象需要提供给其他对象访问,而且各个调用者可能都需
要修改其值时。
原型模式的注意事项
(1)构造函数不会执行
(2)浅拷贝和深拷贝
Object 类提供的方法clone 只是拷贝本对象,其对象内部的数组、引用对象都不拷贝,还是
指向原对象的内部元素地址,这种拷贝就叫做浅拷贝。(String 类型的Java 希望把其当作
基本类型使用,它是没有clone 方法的。)
深拷贝和浅拷贝建议不要混合使用,特别是在设计类的继承的时,父类引用多个变量就非常复杂。
建议的方法是深拷贝和浅拷贝分开实现。
要使用clone 方法,类的成员变量上不要增减final 关键字。
上一篇: 设计模式-原型模式