原型模式——对象创建型模式

原创 2016年08月30日 09:44:57

一、意图
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
二、适用性
当一个系统应该独立于它的产品创建、构成和表示时,要使用Prototype模式;以及

  • 当要实例化的类是在运行时刻指定时,例如,通过动态装载;或者
  • 为了避免创建一个类与产品类层次平行的工厂类层次时,或者
  • 当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆他们可能比每次用合适的状态手工实例化该类更方便一些。

三、结构
这里写图片描述
四、代码

import java.util.ArrayList;

/**
 * Created by Administrator on 2016/8/30.
 */
public class ConcretePrototype implements Cloneable {

    private String name ;
    private ArrayList<String> arrayList = new ArrayList<>();
    public String getName() {
        return name;
    }

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

    public ArrayList<String> getArrayList() {
        return arrayList;
    }

    public void setArrayList(ArrayList<String> arrayList) {
        this.arrayList = arrayList;
    }

    @Override
    protected ConcretePrototype clone() throws CloneNotSupportedException {
        ConcretePrototype clone = (ConcretePrototype)super.clone();
        // arrayList 需要深拷贝
        clone.arrayList = (ArrayList<String>) arrayList.clone();
        return clone;
    }
}
public class Client {
    public static void main(String[] args) {
        ConcretePrototype prototype = new ConcretePrototype();
        prototype.setName("prototype");
        ArrayList arrayList = new ArrayList();
        arrayList.add("hello");
        prototype.setArrayList(new ArrayList<>());
        try {
            ConcretePrototype clone = prototype.clone();
            System.out.println("clone.name= " + clone.getName());
            System.out.println("prototype.arrayList== clone.arrayList : " + (prototype.getArrayList() ==
                    clone.getArrayList()));
            System.out.println("prototype.arrayList.equal(clone.arrayList): "+(
                    prototype.getArrayList().equals(clone.getArrayList())
                    ));
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
    }
}
结果:
clone.name= prototype
prototype.arrayList== clone.arrayList : false
prototype.arrayList.equal(clone.arrayList): true
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

JavaScript创建对象 —— 原型模式

我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,这个对象我们叫它原型对象。而这个原型对象的用途是包含可以由特定类型的所有实例共享的属性和方法。它所包含的属性...

对象的克隆——原型模式(二)

7.3 完整解决方案       Sunny公司开发人员决定使用原型模式来实现工作周报的快速创建,快速创建工作周报结构图如图7-3所示: 图7-3 快速创建工作周报结构图       在图7...

对象的克隆——原型模式

什么是原型模式在使用原型模式时,我们需要首先创建一个原型对象,再通过复制这个原型对象来创建更多同类型的对象。原型模式的定义如下:原型模式(Prototype Pattern):使用原型实例指定创建对...
  • Todo_
  • Todo_
  • 2016-01-29 17:19
  • 520

对象的克隆——原型模式

本文转载自 :http://blog.csdn.net/lovelion/article/details/7424559 张纪中版《西游记》以出乎意料的造型和雷人的台词遭到广大观众朋...

对象的克隆——原型模式(三)

7.4 带附件的周报       通过引入原型模式,Sunny软件公司OA系统支持工作周报的快速克隆,极大提高了工作周报的编写效率,受到员工的一致好评。但有员工又发现一个问题,有些工作周报带有附件,例...

对象的克隆——原型模式

张纪中版《西游记》以出乎意料的造型和雷人的台词遭到广大观众朋友的热议,我们在此对该话题不作过多讨论。但无论是哪个版本的《西游记》,孙悟空都是其中的一号雄性主角,关于他(或它)拔毛变小猴的故事几乎人人皆...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)