原始模型(Prototype)模式属于对象的创建模式。
通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象。这就是原始模型模式的用意。
Java的所有类都是从 java.lang.Object 类继承而来的,而 Object 类提供下面的方法对对象进行复制:
protected Object clone()
子类也可以把这个方法置换掉,提供满足自己需要的复制方法。
Java语言提供的Cloneable接口只有一个作用,就是在运行时期通知Java虚拟机可以安全的在这个类上使用 clone() 方法。
由于Object 类本身并不实现 Cloneable 接口,因此如果所考虑的类没有实现Cloneable接口时,调用 clone() 方法会抛出 CloneNotSupportedException 异常。
一般而言, clone() 方法满足以下描述:
涉及三个角色:
示意性源码
角色如下:
如果需要创建的原型对象数目较少而且比较固定,可以采用第一种形式,即简单形式的原始模型模式。这种模式中,原型对象的引用可以由客户端自己保存。
如果要创建的原型对象数目不固定的话,可以采用第二种形式,即登记形式的原始模型模式。这种模式中,由管理员保存原型对象的引用。