关闭

Java设计模式5:原型模式

标签: java设计模式原型模式
150人阅读 评论(0) 收藏 举报
分类:

原型模式

原型模式属于对象的创建模式,通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象,这就是原型模式的用意。

 

原型模式结构

原型模式要求对象实现一个可以克隆机身的接口(关于克隆,请参考Cloneable接口和Object的clone()方法,这样就可以通过复制一个实例对象本身来创建一个新的实例。这样一来,通过原型实例创建新的对象,就不再需要关心这个实例本身的类型,只要实现了克隆自身的方法,就可以通过这个方法来获取新的对象,而无须再通过new去创建。

原型模式涉及到三个角色:

1、客户角色

客户类提出创建对象的请求

2、抽象原型角色

这是一个抽象角色,通常由一个接口或者抽象类实现,此角色给出所有具体原型类所需的接口

3、具体原型角色

被复制的角色,此角色需要实现抽象的原型角色所要求的接口

 

原型模式示例

定义一个抽象原型角色,抽象类,实现Cloneable接口:

复制代码
public abstract class Prototype implements Cloneable
{
    public Prototype clone()
    {
        Prototype prototype = null;
        try
        {
            prototype = (Prototype)super.clone();
        }
        catch (CloneNotSupportedException e)
        {
            e.printStackTrace();
        }
        
        return prototype;
    }
    
    public abstract void show();
}
复制代码

定义一个具体原型角色,继承Prototype类:

复制代码
public class ConcretePrototype extends Prototype
{
    public void show()
    {
        System.out.println("ConcretePrototype.show()");
    }
}
复制代码

定义一个客户端调用:

复制代码
public class Client
{
    public static void main(String[] args)
    {
        ConcretePrototype cp = new ConcretePrototype();
        for (int i = 0; i < 10; i++)
        {
            ConcretePrototype clonecp = (ConcretePrototype)cp.clone();
            clonecp.show();
        }
    }
}
复制代码

比方说一个类实例很有用的时候,就可以使用原型模式去复制它。不过原型模式单独用得不多,一般是和其他设计模式一起使用。

 

原型模式在Java中的应用及解读

既然原型模式的关注点是在于通过克隆自身来获取一个和自身一样的对象,那其实只要是实现了Cloneable接口的类都可以算是原型模式的应用,比如ArrayList吧:

复制代码
public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
    ...
    public Object clone() {
    try {
        ArrayList<E> v = (ArrayList<E>) super.clone();
        v.elementData = Arrays.copyOf(elementData, size);
        v.modCount = 0;
        return v;
    } catch (CloneNotSupportedException e) {
        // this shouldn't happen, since we are Cloneable
        throw new InternalError();
    }
    }
    ...
}
复制代码

程序中获取到了一个ArrayList的实例arrayList,我们完全可以通过调用arrayList.clone()方法获取到原ArrayList的拷贝。

 

原型模式的优点

原型模式是一种类的创建模式,可以看到到目前为止的四种创建型模式,客户端(调用方)都没有直接new一个类实例出来。把new一个类实例的动作由客户端(调用方)交给别人做而不是自己做,这就是创建型模式的宗旨。

使用原型模式创建对象比直接new一个对象在性能上好得多,因为Object类的clone()方法是一个native方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。

使用原型模式的另一个好处是简化对象的创建,使得创建对象就像普通的复制黏贴一样简单。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Java开发中的23种设计模式详解之一:5种创建型模式

一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模...
  • fy_hanxu
  • fy_hanxu
  • 2016-05-23 14:38
  • 5803

Java设计模式(五) 原型模式详解

在开发过程中,有时会遇到为一个类创建多个实例的情况,这些实例内部成员往往完全相同或有细微的差异,而且实例的创建开销比较大或者需要输入较多参数,如果能通过复制一个已创建的对象实例来重复创建多个相同的对象...
  • u013916933
  • u013916933
  • 2016-06-04 16:22
  • 2442

设计模式(5)之原型模式

什么是原型模式? Prototype模式是一种对象创建型模式,它采取复制原型对象的方法来创建对象的实例。使用Prototype模式创建的实例,具有与原型一样的数据。 原型模式的特点 由原型对象自...
  • birdflyto206
  • birdflyto206
  • 2016-04-19 18:24
  • 1003

JAVA设计模式(5) —<创建型>原型模式(Prototype)

1 定义: 原型模式(Prototype) Specify the kinds of objects to create using a prototypical instance, and cre...
  • luckykapok918
  • luckykapok918
  • 2015-10-16 11:32
  • 300

java设计模式5--原型模式(Prototype)

本文地址:http://www.cnblogs.com/archimedes/p/java-prototype-pattern.html,转载请注明源地址。 原型模式 用原型实例指定创建对...
  • GarfieldEr007
  • GarfieldEr007
  • 2016-03-22 12:37
  • 415

(5)Java设计模式-原型模式(Prototype)

原型模式(Prototype) 原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。本小结会...
  • pange1991
  • pange1991
  • 2016-04-13 22:07
  • 199

java设计模式5——原型模式(Prototype)

原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。本小结会通过对象的复制,进行讲解。在Java中...
  • wangchangshuai0010
  • wangchangshuai0010
  • 2014-01-19 19:08
  • 652

java设计模式之原型模式(5)

原型模式也是一种创建型模式,只不过他创建的对象不是通过new来创建的,而是通过克隆来实现。为什么要通过克隆而不是new呢? 举个例子:比如一个对象的创建需要读取本地文件(Excel)中的信息,而且需...
  • maosijunzi
  • maosijunzi
  • 2014-07-28 13:56
  • 1058

Java设计模式(5)创建型:原型模式

原型模式是指用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节。工作原理是:通过将一个原型对象...
  • zeping891103
  • zeping891103
  • 2016-12-20 17:29
  • 213

Java设计模式-5-原型模式

一、介绍 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件: 1、实现Cloneable接口。 2、重写Object类中的clone...
  • wl101yjx
  • wl101yjx
  • 2015-02-24 18:19
  • 316
    个人资料
    • 访问:41044次
    • 积分:773
    • 等级:
    • 排名:千里之外
    • 原创:19篇
    • 转载:112篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论