在有些时候,我们不能根据类来生成实例,而要根据现有的实例来生成新的实例
- 对象种类繁多,无法将它们整合到一个类中时
- 难以根据类生成实例时
- 想解耦框架与生成的实例时
这种不根据类来生成实例,而是根据实例来生成新实例的模式就是原型模式。
类图:
Product
继承了Java的Cloneable
接口,声明了use
和createClone
方法。UnderlinePen
实现Product
接口,将字符串加上下划线并显示。MessageBox
实现Product
接口,将字符串放入方框并显示。
代码:
1 | package framework; |
Manager
使用hashmap来保存名字与实例。注意并没有出现具体的UnderlinePen
和MessageBox
。
1 | import framework.*; |
MessageBox
将字符串放入方框。在createClone()
中实现复制自身。UnderlinePen
类与此类似,不放代码了。
1 | import framework.*; |
感觉给出的例子不是很典型,也就勉勉强强符合第三点吧。以后在使用中再加深理解。