原型模式

原型(Prototype)模式
原型模式的用意是:通过给出一个原型对象来指明所要创建的对象类型,然后用复制这个原型对象的办法创建出更多的同类型对象。
克隆的实现方法有两种:浅拷贝(shallow copy)与深拷贝(deep copy)。
浅拷贝:只负责克隆按值传递的数据(比如基本数据类型、String类型)。
深拷贝:除了浅拷贝要克隆的值外,还负责克隆引用类型(属性的类型也是对象)的数据。
执行深拷贝后,原来的对象和新创建的对象不会共享任何东西;改变一个对象对另外一个对象没有任何影响。
Prototype模式的结构
客户(Client)角色:客户类提出创建对象的请求。
抽象原型(Prototype)角色:一个抽象角色,通常由一个C#接口或抽象类实现。此角色给出所有的具体原型类所需的接口。在C#中,抽象原型角色通常实现了lCloneable接口。
具体原型(Concrete Prototype)角色:被复制的对象。此角色需要实现抽象原型角色所要求的接口。
优点:一般在初始化的信息不发生变化的情况下,克隆是最好的办法。即隐藏了创建的细节,又对性能是大大的提高。
浅复制:所有的对其他对象的引用都仍然指向原来的对象。
深复制:把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。
Prototype模式本质(原型引入的初衷)

  • 克隆生成对象。
  • 如果要生成一大批很相像的类的实例,不用每次去做重复的赋值工作。

Prototype模式与Factory模式的关系
原型模式实现起来,完全可以达到工厂模式的效果;而且,用起来甚至比工厂模式更方便、灵活。工厂模式和原型模式都是创建型模式(三种类型,行为,结构),他们的基本功能都能生成对象,因而使得原型模式在功能上可以代替工厂模式。
总结
Prototype模式通过复制原型(Prototype)而获得新对象创建的功能,这里Prototype本身就是“对象工厂”。
Prototype模式从自身复制自己创建新对象。
Prototype模式的优点

  • Prototype模式允许动态增加或减少产品类。
  • Prototype模式提供了简化的创建结构。

Prototype模式的缺点
每个原型的子类都必须实现clone的操作,尤其在包含引用类型的对象时,clone方法会比较麻烦,必须要能够递归地让所有的相关对象都要正确地实现克隆。

你可能感兴趣的:(设计模式笔记,设计模式)