不根据类来生成实例,而是根据实例来生成新实例。
在开发过程中,有时候也会有“在不指定类名的前提下生成实例”的需求。例如,在以下情况下,就不能根据类来生成实例,而要根据现有的实例来生成新的实例。
(1) 对象种类繁多,无法将它们整合到一个类中时
(2) 难以根据类生成实例时
(3) 想解耦框架与生成的实例时
在Java语言中,可以使用clone创建出实例的副本。
示例
将字符串放入方框中显示出来或是加上下划线显示出来。
Product接口
1 | package framework; |
Manager类
1 | package framework; |
MessageBox类
1 | import framework.Product; |
UnderlinePen类
1 | import framework.Product; |
Main类
1 | import framework.Manager; |
运行结果
1 | "Hello, world." |
登场角色
Prototype(原型)
Prototype角色负责定义用于赋值现有实例来生成新实例的方法。在示例程序中,由Product接口扮演此角色。
ConcretePrototype(具体的原型)
ConcretePrototype角色负责实现复制现有实例并生成新实例的方法。在示例程序中,由MessageBox类和UnderlinePen类扮演此角色。
Client(使用者)
Client角色负责使用复制实例的方法生成新的实例。在示例程序中,由Manager类扮演此角色。