Java设计模式(六)原型模式

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

原型模式

原型模式用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

原型模式

原型模式的参与角色:

(1) 客户角色:客户类提出创建对象的请求。

(2) 抽象原型角色:这是一个抽象角色,通常由一个java接口或抽象类实现,具体原型都需要实现该接口。

(3) 具体原型角色:客户端所需要的被复制的对象。

1、创建抽象原型角色

public class Prototype implements Cloneable {
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}

2、创建具体原型角色

public class ConcretePrototype1 extends Prototype {
public static int classFlag = 1;
@Override
protected ConcretePrototype1 clone() throws CloneNotSupportedException {
return (ConcretePrototype1) super.clone();
}
}
public class ConcretePrototype2 extends Prototype {
public static int classFlag = 2;
@Override
protected ConcretePrototype2 clone() throws CloneNotSupportedException {
return (ConcretePrototype2) super.clone();
}
}

3、原型模式的使用

public class PrototypePatternMain {
public static void main(String[] args) throws CloneNotSupportedException {

Prototype prototype1 = new ConcretePrototype1();
ConcretePrototype1 concretePrototype1 = (ConcretePrototype1) prototype1.clone();
System.out.println(concretePrototype1.classFlag);
Prototype prototype2 = new ConcretePrototype2();
ConcretePrototype2 concretePrototype2 = (ConcretePrototype2) prototype2.clone();
System.out.println(concretePrototype2.classFlag);

}
}

优点:1、性能提高。2、逃避构造函数的约束。

缺点:1、配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。2、必须实现 Cloneable 接口。

本文实现源码https://github.com/wshunli/design-patterns/tree/master/src/ch06

参考资料
1、《JAVA与模式》之原型模式 - java_my_life - 博客园
https://www.cnblogs.com/java-my-life/archive/2012/04/11/2439387.html
2、23种设计模式(5):原型模式 - CSDN博客
https://blog.csdn.net/zhengzhb/article/details/7393528
3、java中的原型模式 - 简书
https://www.jianshu.com/p/4e1f2d090f20