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

Author Avatar
wshunli 9月 07, 2018
  • 在其它设备中阅读本文章

原型模式(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

如果本文对您有所帮助,且您手头还很宽裕,欢迎打赏赞助我,以支付网站服务器和域名费用。 https://paypal.me/wshunli 您的鼓励与支持是我更新的最大动力,我会铭记于心,倾于博客。
本文链接:https://www.wshunli.com/posts/b7ba42b9.html