Prototype(原型)–对象创建模式
一、意图
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
二、动机
1.在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。
2.如果应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出“这些易变对象”,从而使得“依赖这些易变对象的客户程序”不随着需求改变而改变?
三、适用性
当一个系统应该独立于它的产品创建、构建和表示时,要使用prototype模式;以及
1.当要实例化的类是在运行时刻指定时,例如,通过动态加载;或者
2.为了避免创建一个与产品层次平行的工厂类层次时;或者
3.当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类方便一些。
四、结构
五、效果
1.运行时候增加和删除产品。
2.改变值以指定新对象。
3.改变结构以指定新对象。
4.减少子类的构造。
5.用类动态的配置应用。
六、实现
1.使用一个原型管理器。
2.实现克隆操作。
3.初始化克隆对象。
七、要点总结
1.Prototype模式同样用于隔离类对象的使用者和具体类型(易变类)之间的耦合关系,它同样要求这些“易变类”拥有“稳定的接口”。
2.Prototype模式对于“如何创建易变类的实体对象”采用“原型克隆“的方法来做,它使得我们可以非常灵活地动态创建”拥有某些稳定接口“的新对象——所需工作仅仅是注册一个新类的对象(即原型),然后在任何需要的地方Clone。
3Prototype模式中的Clone方法可以利用某些框架中的序列化来实现深拷贝。
八、举例说明
类似于复制一个东西,然后粘贴。很多语言或者框架都实现了这个机制。
本文为李建忠设计模式视频的笔记以及《设计模式-可复用面向对象的软件的基础》和自己的部分见解