意图:
用原型实例指定创建对象的种类,并且通过拷贝这些原型的对象。
参与者:
Prototype
——声明一个克隆自身的接口(或者是抽象类)
ConcretePrototype
——实现接口或者是抽象类中的方法,实现一个克隆自身的操作
Client
——让原型克隆自身从而创建一个新的对象。
协作:
客户请求一个原型克隆自身
类图:
具体代码:
package hello;
abstract class Prototype implements Cloneable {
public Prototype clone(){
Prototype prototype = null;
try{
prototype =(Prototype)super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return prototype;
}
}
class ConcretePrototype1 extends Prototype{
public void info(){
System.out.println("ConcretePrototype1");
}
}
class ConcretePrototype2 extends Prototype{
public void info(){
System.out.println("ConcretePrototype2");
}
}
public class Client {
public static void main(String[] args){
Prototype cp = new ConcretePrototype1();
for(int i=0; i< 10; i++){
ConcretePrototype1 clonecp =(ConcretePrototype1)cp.clone();
clonecp.info();
}
Prototype cp2 = new ConcretePrototype2();
for(int i=0; i< 10; i++){
ConcretePrototype2 clonecp =(ConcretePrototype2)cp2.clone();
clonecp.info();
}
}
}
输出结果:
ConcretePrototype1
ConcretePrototype1
ConcretePrototype1
ConcretePrototype1
ConcretePrototype1
ConcretePrototype1
ConcretePrototype1
ConcretePrototype1
ConcretePrototype1
ConcretePrototype1
ConcretePrototype2
ConcretePrototype2
ConcretePrototype2
ConcretePrototype2
ConcretePrototype2
ConcretePrototype2
ConcretePrototype2
ConcretePrototype2
ConcretePrototype2
ConcretePrototype2