java之原型模式
程序员文章站
2022-03-04 13:25:33
...
定义
使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。
角色
- Prototype(抽象原型类):它是声明克隆方法的接口,是所有具体原型类的公共父类,可以是抽象类也可以是接口,甚至还可以是具体实现类。
- ConcretePrototype(具体原型类):它实现在抽象原型类中声明的克隆方法,在克隆方法中返回自己的一个克隆对象。
- Client(客户类):让一个原型对象克隆自身从而创建一个新的对象,在客户类中只需要直接实例化或通过工厂方法等方式创建一个原型对象,再通过调用该对象的克隆方法即可得到多个相同的对象。由于客户类针对抽象原型类Prototype编程,因此用户可以根据需要选择具体原型类,系统具有较好的可扩展性,增加或更换具体原型类都很方便。
示例
原型接口
public interface Prototype {
public Prototype clone();
public void setName(String name);
}
具体原型类
第一种方法重写clone:
public class ConcretePrototype implements Prototype {
private String name ;
public Prototype clone(){
ConcretePrototype concretePrototype = new ConcretePrototype();
concretePrototype.setName(this.name);//拷贝原对象属性
return concretePrototype;
}
public void setName(String name) {
this.name = name;
}
}
第二种方式使用Object.clone(),这种方式的话,接口Cloneable相当于原型接口,相应的下面测试类需要改成用Cloneable接收;
public class ConcretePrototype implements Cloneable {
private String name ;
public Cloneable clone(){
Object object = null;
try {
object = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return (Cloneable)object;
}
public void setName(String name) {
this.name = name;
}
}
测试类
public class PrototypeTest {
public static void main(String[] args) {
ConcretePrototype concretePrototype = new ConcretePrototype();
Prototype prototype = concretePrototype.clone();
System.out.println(concretePrototype);
System.out.println(prototype);
}
}
上一篇: 原型模式