定义
原型模式是一种简单的设计模式,客户端知道抽象Prototype类。在运行时,抽象Prototype子类的任何对象都可以按照客户端的意图来进行复制。因此无需手工创建就可以创造同一类型的多个实例。
类图
使用场景
在以下情形,会考虑使用原型模式:
- 需要创建的对象应独立于其类型与创建方式
- 要实例化的类是在运行时决定的
- 不想要一个与产品层次相对应的工厂层次(也就是工厂类不需要与产品类一一对应)
- 不同类实例间的差异仅是状态的若干组合。因此复制相应数量的原型比手工实例化更加方便。
- 类不容易创建,比如每个组件可把其他组件作为子节点的组合对象。复制已有的组合对象并对副本进行修改会更加容易
使用原型模式的常见误解是“原型对象应该是一种象征性对象从来不切实用”,从功能的角度上来看,不管什么对象,只要复制自身比手工实例化要好,都可以是原型对象.在以下两种特别常见的情形,我们会考虑使用此Prototype模式:
- 有很多相关的类,其行为略有不同,而且主要差异在于内部属性,如名称,图像等
- 需要使用组合(树形)对象作为其他东西的基础,例如,使用组合对象作为组件来构建另一个组合对象.
现实世界中还有许多状况应该应用这一模式.使用设计模式更像艺术行为而非科学行为.打破常规,用于创新,更聪明地工作.
demo地址:https://github.com/MRGX/---