10.11
原型模式
// 抽象原型类
abstract class Prototype implements Cloneable {
public abstract Prototype clone();
}
// 具体原型类
class ConcretePrototype extends Prototype {
private String attribute;
public ConcretePrototype(String attribute) {
this.attribute = attribute;
}
public void setAttribute(String attribute) {
this.attribute = attribute;
}
public String getAttribute() {
return attribute;
}
@Override
public Prototype clone() {
// 调用父类的克隆方法进行对象的复制
try {
return (Prototype) super.clone();
} catch (CloneNotSupportedException e) {
return null;
}
}
}
// 客户端代码
public class PrototypePatternExample {
public static void main(String[] args) {
// 创建原型对象
ConcretePrototype prototype = new ConcretePrototype("Attribute 1");
// 克隆原型对象
ConcretePrototype clonedPrototype = (ConcretePrototype) prototype.clone();
// 修改克隆对象的属性
clonedPrototype.setAttribute("Attribute 2");
// 打印原型对象和克隆对象的属性
System.out.println("Original Prototype Attribute: " + prototype.getAttribute());
System.out.println("Cloned Prototype Attribute: " + clonedPrototype.getAttribute());
}
}
在上面的例子中,我们首先确定了抽像原型Prototype
,它实现了Cloneable
接口。抽像原型中声明了一个抽像的clone()
方法,用于在实体原型中实际现在对象的复制。
然后,我们实际上发现了实体原型类ConcretePrototype
,它继承了自己抽像原型类。实体原型类中包含了一个属性attribute
,并提供了相应的访问方法。在clone()
方法中,我们调整了父类的clone()
方法进行对象的复制。
最后,在客户端代码中,我们创建了一个原型对象prototype
,然后通过调整clone()
方法克隆了该对象,得到了克隆对象clonedPrototype
。我们修改了克隆对象的属性,并分别打印了原型对象和克隆对象的属性。
通过原始模型,我们可以通过复制发现对象来创建新的象,并且不需要依赖于实体类的构造函数。这种方式可以运输行时动态地创建对象,并且可以减少少量对象的创建对象。同时,原始模型还提供了一种简单的方法来处理复合对象的创建和初始化过程。