原型模式
亦称: 克隆、Clone、Prototype
1. 简介
原型模式是一种创建型设计模式, 使你能够复制已有对象, 而又无需使代码依赖它们所属的类。
2. 模拟场景
假设要实现一个上机考试抽题的服务,需要在里面场景一个题库的场景类信息,包括选择题。
你需要新建一个属于相同类的题对象。但有个小问题。并非所有对象都能通过这种方式进行复制, 因为有些对象可能拥有私有成员变量, 它们在对象本身以外是不可见的。 直接复制还有另外一个问题。因为你必须知道对象所属的类才能创建复制品, 所以代码必须依赖该类。即使你可以接受额外的依赖性, 那还有另外一个问题: 有时你只知道对象所实现的接口, 而不知道其所属的具体类, 比如可向方法的某个参数传入实现了某个接口的任何对象。
3. 解决方案
原型模式将克隆过程委派给被克隆的实际对象。模式为所有支持克隆的对象声明了一个通用接口, 该接口让你能够克隆对象, 同时又无需将代码和对象所属类耦合。通常情况下, 这样的接口中仅包含一个 克隆方法。 所有的类对 克隆方法的实现都非常相似。该方法会创建一个当前类的对象, 然后将原始对象所有的成员变量值复制到新建的类中。你甚至可以复制私有成员变量, 因为绝大部分编程语言都允许对象访问其同类对象的私有成员变量。 支持克隆的对象即为原型。当你的对象有几十个成员变量和几百种类型时, 对其进行克隆甚至可以代替子类的构造。
总结
原型是一种创建型设计模式, 使你能够复制对象, 甚至是复杂对象, 而又无需使代码依赖它们所属的类。
所有的原型类都必须有一个通用的接口, 使得即使在对象所属的具体类未知的情况下也能复制对象。原型对象可以生成自身的完整副本, 因为相同类的对象可以相互访问对方的私有成员变量。
4. Java中的例子
java.lang.Object#clone() (类必须实现 java.lang.Cloneable 接口)