原型是一种创建型设计模式, 使你能够复制对象, 甚至是复杂对象, 而又无需使代码依赖它们所属的类。
所有的原型类都必须有一个通用的接口, 使得即使在对象所属的具体类未知的情况下也能复制对象。 原型对象可以生成自身的完整副本, 因为相同类的对象可以相互访问对方的私有成员变量。
复杂度:
流行度:
使用示例: Java 的 Cloneable
(可克隆) 接口就是立即可用的原型模式。
任何类都可通过实现该接口来实现可被克隆的性质。
java.lang.Object#clone()
(类必须实现 java.lang.Cloneable
接口)
识别方法: 原型可以简单地通过 clone
或 copy
等方法来识别。
复制图形
让我们来看看在不使用标准 Cloneable
接口的情况下如何实现原型模式。
shapes: 形状列表
shapes/Shape.java: 通用形状接口
shapes/Circle.java: 简单形状
shapes/Rectangle.java: 另一个形状
Demo.java: 克隆示例
OutputDemo.txt: 执行结果
原型注册站
你可以实现中心化的原型注册站 (或工厂), 其中包含一系列预定义的原型对象。 这样一来, 你就可以通过传递对象名称或其他参数的方式从工厂处获得新的对象。 工厂将搜索合适的原型, 然后对其进行克隆复制, 最后将副本返回给你。
cache
cache/BundledShapeCache.java: 原型工厂
Demo.java: 克隆示例
OutputDemo.txt: 执行结果