原型模式通常包括以下几个角色:
- 抽象原型(Prototype)角色:定义了一个接口,用于声明克隆自身的方法。这个接口既可以是接口,也可以是抽象类或具体类。
- 具体原型(Concrete Prototype)角色:实现了抽象原型角色所定义的接口,具体实现了克隆自身的操作。
- 客户(Client)角色:使用具体原型角色的对象来创建新的对象。
在Java中,实现原型模式需要满足以下两个条件:
- 必须实现Cloneable接口。在Java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。
- 重写Object类中的clone()方法。由于Object类的clone()方法是protected类型的,因此需要在具体原型角色中将其重写为public类型,以便客户角色可以调用该方法来创建新的对象。