一句话概括Prototype(原型模式)
通过已有实例创建新的实例
主要的接口和类
如果光讲这个模式的话,没什么主要的接口和类,一般都是与工厂模式结合,这里我会在之后的深入学习设计模式再做学习
我这里就直接使用clone方法,创建对象的拷贝实例赋值给新的对象
需要注意的是,使用clone方法的类要实现cloneable表示可以使用clone
具体案例
public class CloneableClass implements Cloneable {
public static void main(String[] args) throws CloneNotSupportedException {
//原型本体
CloneableClass cc = new CloneableClass();
CloneableClass c1 = null;
//克隆五个CloneableClass
for (int i=0;i<5;i++){
c1 = (CloneableClass) cc.clone();
System.out.println(c1);
}
}
}
测试结果
com.cutezha.prototype.CloneableClass@10f87f48
com.cutezha.prototype.CloneableClass@b4c966a
com.cutezha.prototype.CloneableClass@2f4d3709
com.cutezha.prototype.CloneableClass@4e50df2e
com.cutezha.prototype.CloneableClass@1d81eb93
思考与总结
为什么用clone而不直接使用new
原型模式就是要在原有的实例上作出一些小改变,使用clone(这里只是浅拷贝,比如对象里的复杂类型(如一个对象),他是不会去拷贝一个新的,而是就是用原有的引用)的话原有的属性不改变,只用改变想要改变的就行了;而使用new来创建,就是创建一个新的对象。相比起来,clone是直接调用底层的c++代码(具体怎样的我还未了解),速度更快。
为什么要使用原型模式
这里就先将问题引出,在深入学习的时候再做解释,因为要结合工厂模式,而本文主要是对各种设计模式初步的了解