原型模式(Prototype)

不羁的心 提交于 2020-01-21 15:49:48

一、定义

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。

二、例子

原型(实际上是implements了Cloneable接口,进而重写clone()方法):

package com.wuychn.prototype;

public class ProtoType implements Cloneable {
    
    private String name;

    @Override
    public ProtoType clone() {
        try {
            return (ProtoType) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return null;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

测试代码:

package com.wuychn.prototype;

public class Test {

    public static void main(String[] args) {
        ProtoType pt1 = new ProtoType();
        pt1.setName("protoType_1");
        ProtoType pt2 = pt1.clone();
        System.out.println(pt1 == pt2);
        System.out.println(pt1.getClass() == pt2.getClass());
        pt2.setName("protoType_2");
        System.out.println(pt1.getName() + " " + pt2.getName());
    }

}

克隆还分为浅克隆和深克隆,详情见我的另一篇博文http://blog.sina.com.cn/s/blog_8a3eec6f0102xm1w.html

三、优缺点

优点:

如果创建新的对象比较复杂时,可以利用原型模式简化对象的创建过程,同时也能够提高效率。

可以使用深克隆保持对象的状态。

原型模式提供了简化的创建结构。

缺点:

在实现深克隆的时候可能需要比较复杂的代码。

需要为每一个类配备一个克隆方法,而且这个克隆方法需要对类的功能进行通盘考虑,这对全新的类来说不是很难,但对已有的类进行改造时,不一定是件容易的事,必须修改其源代码,违背了“开闭原则”。


原文:https://blog.csdn.net/u013256816/article/details/50981322

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!