【原型(Prototype)模式】
根据实例原型、实例模型来生成新的实例。
在java中,可以使用clone创建出实例的副本。在本章中,将学习clone方法与Cloneable接口的使用方法。
在java中,可以使用new关键字指定类名来生成类的实例。
像这样使用new来生成实例时,是必须指定类名的。
但是在开放过程中,有时候也会有“在不指定类名的前提下生成实例”的需求。
在以下情况下,不能根据类来生成实例,而是要根据现有的实例来生成新的实例。
(1)对象种类繁多,无法将它们整合到一个类中
(2)难以根据类生成实例时
(3)想解耦框架与生成的实例时
需要注册一个原型实例,然后通过复制该实例来生成新的实例。
根据实例生成实例与使用复印机复印文件相类似。即使不知道原来文档中的内容,也可以使用复印机复制出完全相同的文档。

【角色】
Prototype(原型):负责定义用于复制现有实例来生成新实例的方法。
ConcretePrototype(具体的类型):负责实现复制现有实例并生成新实例的方法。
Client(使用者):负责使用复制实例的方法生成新的实例。
类名是束缚吗?
面向对象编程的目标之一:作为组件复用
一旦在代码中出现使用的类的名字就无法与该类分离开,也就无法实现复用。
当多个类必须紧密结合时,代码中出现这些类的名字是没有问题的,但是如果那些需要被独立出来作为组件复用的类的名字出现在代码中,就有问题了。