1、概述
在软件系统中,有时候面临的产品类是动态变化的,而且这个产品类具有一定的等级结构。这时如果用工厂模式,则与产品类等级结构平行的工厂方法类也要随着这种变化而变化,显然不大合适。那么如何封装这种动态的变化?从而使依赖于这些易变对象的客户程序不随着产品类变化?
2、意图
原型模式是通过现有的一个对象,复制出更多的此类型的对象以供使用。
3、结构图
图解说明
UsePrototype类是用户类也是程序启动类
RGBColor类是一个颜色类
ColorPrototype类是抽象类,含有Clone方法
ConcretePrototype 类继承ColorPrototype,实现浅拷贝。
ConcretePrototypeDeep类继承ColorPrototype,实现深拷贝
关于深拷贝和浅拷贝简单的说:
浅拷贝(Shallow Copy影子克隆):只复制对象的基本类型。对象类型,仍属于原来的引用。
深拷贝(Deep Copy 深度克隆):不仅复制对象的基本类,同时也复制原对象中的对象.完全产生新对象。
4、代码的实现
注意:代码中的深拷贝是使用序列化实现的。
5、运行结果
可以看出,浅拷贝中,拷贝对象中的引用对象(RGBColor类对象)与原对象中的对应的引用对象(RGBColor类对象)指向同一个内存地址,而值信息则拷贝对象有一个另外的拷贝。
深拷贝中值变量和引用变量都重新开辟了一个内存,所以拷贝对象与原对象中的变量间所在的内存不一样。
以上是我的见解,欢迎大家批评指正。