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

原创 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
版权声明:本文为博主原创文章,未经博主允许不得转载。

浅谈设计模式——对象的创建型模式

近期对Java的设计模式比较感兴趣,设计模式更好的用途只能等到工作后慢慢地体会了,以下总结一下每种设计模式的摘要,方便有个知识框架。感兴趣的可以参考阎宏博士的《Java与模式》,同时参考以下博客,个人...
  • zhuqiuhui
  • zhuqiuhui
  • 2016年08月03日 10:42
  • 420

原型模式 c++(对象创建型模式)

定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型模式就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。不用重新初始化对象,而是动态的获得对象运行时的状...
  • xlf13872135090
  • xlf13872135090
  • 2014年02月23日 18:19
  • 515

六种创建型设计模式的比较和总结

一、描述 创建型设计模式包括如下几个:简单工厂模式(Simple Factory)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、创建者模式(Bui...
  • tongyuehong
  • tongyuehong
  • 2015年05月02日 15:46
  • 1453

23种设计模式----创建型模式(工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式)

1.单例模式  单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自己实例化并向整个系统提供这个实例。   通用类图如下:      通用代码如下:public cl...
  • oChangWen
  • oChangWen
  • 2017年06月17日 21:37
  • 449

浅拷贝与深度拷贝(原型模式)

深度复制
  • liang08114
  • liang08114
  • 2016年05月09日 11:14
  • 532

创建型模式--原型模式

概述 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。  适用性 1.当一个系统应该独立于它的产品创建、构成和表示时。 2.当要实例化的类是...
  • GULINHAI12
  • GULINHAI12
  • 2014年12月23日 21:55
  • 1385

创建型模式—原型模式

原型模式(Prototype)用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。 Prototype Pattern也是一种创建型模式,它关注的是大量相同或相似对象的创建问题。...
  • wdeng2011
  • wdeng2011
  • 2017年08月18日 11:30
  • 55

原型模式(创建型模式)

由上边的类图可以看出,原型模式总共有三种角色, 1.客户角色:该角色提出创建对象的请求。 2.抽象原型:该角色是一个抽象角色,通常是有一个Java接口或者是抽象类实现 3.具体原型:该角色是被复制的对...
  • yalishadaa
  • yalishadaa
  • 2016年10月17日 11:04
  • 182

创建型模式---原型模式

一、优缺点         原型模式的优点在于:创建对象的时候没有用new方式,而是直接是对内存二进制流的拷贝,相对于new方式,性能更优,       原型模式的缺点在于:直接对内存二进制流的拷贝少...
  • scyatcs
  • scyatcs
  • 2013年07月30日 11:20
  • 606

创建型模式——原型模式

1、什么是原型模式 原型模式就是将一个已有的实例对象,将其复制出一个一模一样的实例对象出来,也就是克隆,原型模式算是设计模式中最简单的一个。它的核心就是类图中的Prototype类,实现原型模式非常...
  • u014174811
  • u014174811
  • 2015年11月16日 09:20
  • 484
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:原型模式——对象创建型模式
举报原因:
原因补充:

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