- 一、角色
- Prototype(抽象原型类):负责定义用于复制现有实例来生成新实例的方法
- ConcretePrototype(具体原型类):负责实现复制现有实例并生成新实例的方法
- Client(客户类/使用者):负责使用复制实例的方法生成新的实例
- 二、适用场景
- 对象种类繁多,无法将他们整合到一个类的时候
- 难以根据类生成实例时
- 想解耦框架与生成的实例时
- 三、实例
- 图-1中的Product是抽象原型角色,它有继承Cloneable接口(本示例是java语言实现),MessageBox、UnderlinePen是具体原型角色,它们都实现Product,Manager则是使用者角色,通过使用原型类的Clone方法进行新实例的创建
- 代码地址:https://github.com/lanhei/DesignPattern/tree/master/src/com/lanhei/patterns/prototype
图-1 - 三、开源项目使用实例
- 在Struts2中为了保证线程的安全性,Action对象的创建使用了原型模式,访问一个已经存在的`Action对象时将通过克隆的方式创建出一个新的对象,从而保证其中定义的变量无须进行加锁实现同步,每一个Action中都有自己的成员变量,避免Struts1因使用单例模式而导致的并发和同步问题
- 在Spring中,用户也可以采用原型模式来创建新的bean实例,从而实现每次获取的是通过克隆生成的新实例,对其进行修改时对原有实例对象不造成任何影响