`

设计模式之Prototype - 原型模式

阅读更多

Prototype模式也叫原型模式,是由GoF提出的23种设计模式中的一种。Prototype模式是一种对象创建型模式,它采取复制原型对象的方法来创建对象的实例。使用Prototype模式创建的实例,具有与原型一样的数据。

本文介绍设计模式中的原型(Prototype)模式的概念,用法,以及实际应用中怎么样使用Prototype模式进行开发。

Prototype模式的概念
Prototype模式是一种对象创建型模式,它跟工厂模式,Builder模式等一样,都用来创建类的实例对象。
但Prototype模式的对象创建方法,具有以下特点:
- 由原型对象自身创建目标对象。也就是说,对象创建这一动作发自原型对象本身。
- 目标对象是原型对象的一个克隆。也就是说,通过Prototype模式创建的对象,不仅仅与原型对象具有相同的结构,还与原型对象具有相同的值。
- 根据对象克隆深度层次的不同,有浅度克隆与深度克隆。

有关Java语言克隆技术的描述,请参考:
Java语言的克隆与深层次克隆技术入门与精通 一文。

简单一点说,
Prototype模式提供一种方法,让类的对象可以实现对自身的复制。

Prototype模式的应用场景:
- 在创建对象的时候,我们不只是希望被创建的对象继承其基类的基本结构,还希望继承原型对象的数据。
- 希望对目标对象的修改不影响既有的原型对象(深度克隆的时候可以完全互不影响)。
- 隐藏克隆操作的细节。很多时候,对对象本身的克隆需要涉及到类本身的数据细节。

现实生活中,就有许多这样的例子:
生物细胞的自身复制;根据产品模型生产产品等等


Prototype模式的模型定义:

Prototype {
    +clone():Prototype
}
即:原型类Prototype 提供clone()方法,实现对对象自身的复制(克隆)。

Prototype模式的实现范例
下面我们使用Prototype模式来实现细胞(Cell)的自身复制过程。
Java语言提供了对象复制的机制,Prototype模式的Java实现一般也通过实现Cloneable接口来实现。
这里我们也通过实现Cloneable接口来说明Prototype模式。
public class Cell implements Cloneable {
    //细胞壁
    private String cellWall;
    //细胞膜
    private String cellMembrane;
    //细胞组织
    private String cellularTissue;

    ...//这里省略掉了对成员变量的setter/getter方法的定义

    //细胞的自身复制
    //这里重载了Obect#clone()方法,为了方便外部调用,把返回值由Object修改为Cell,并把访问级别设置为public
    public Cell clone() {
        try {
            //只需简单地调用super.clone();即可
            return (Cell)super.clone();
        } catch (CloneNotSupportedException e) {
            throw (new InternalError(e.getMessage()));
        }
    }

}

//调用方:
public class Client {
    public static void main(String[] args) {
        //准备原型细胞
        Cell cell = new Cell();
        cell.setCellWall("cell wall 1");
        ...
        //克隆原型细胞
        Cell clonedCell = cell.clone();
        ...
        //操作被克隆的细胞(略)
    }
}


这里使用了一个简单的例子说明了Prototype模式的对象创建过程与方法。里面省略了某些无关紧要的代码。
分享到:
评论

相关推荐

    IOS设计模式浅析之原型模式(Prototype)--copy - iOS知识库1

    IOS设计模式浅析之原型模式(Prototype)--copy - iOS知识库1

    设计模式之Prototype(原型)

    NULL 博文链接:https://wy649898543.iteye.com/blog/1431591

    设计模式 创建型模式 Prototype模式(原型)

    Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。...

    设计模式之Prototype

    设计模式之Prototype

    设计模式C++学习之原型模式(Prototype)

    设计模式C++学习之原型模式(Prototype)

    23种设计模式之Prototype模式代码

    23种设计模式之Prototype模式代码,这是自己学习Prototype模式顺带写的代码,仅供学习交流

    C#设计模式-吕震宇

    C#设计模式(9)-Prototype Pattern C#设计模式(8)-Builder Pattern C#设计模式(7)-Singleton Pattern C#设计模式(6)-Abstract Factory Pattern C#设计模式(5)-Factory Method Pattern C#设计模式(4)...

    JAVA设计模式chm文档

    设计模式之Prototype(原型) 设计模式之Builder 设计模式之Singleton(单态) 结构模式: 设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator...

    原型设计模式prototype

    NULL 博文链接:https://hnzhoujunmei.iteye.com/blog/1032892

    设计模式精解-GoF 23种设计模式解析

    设计模式精解-GoF 23 种设计模式解析附 C++实现源码 目 录 引 言 0.1 设计模式解析(总序) 0.2 设计模式解析后记 0.3 与作者联系 1 创建型模式 1.1 Factory模式 1.2 AbstactFactory模式 1.3 Singleton...

    设计模式文档 chm

    设计模式之Prototype(原型) 设计模式之Builder 设计模式之Singleton(单态) 结构模式: 设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator...

    java版本二十三种设计模式.zip

    - 23种设计模式 - 工厂方法模式(Factory Method) - 抽象工厂模式(Abstract Factory) - 单例模式(Singleton) - 建造者模式(Builder) - 原型模式(Prototype) - 代理模式(Proxy) - 适配器模式(Adapter) - 装饰...

    设计模式精解-GoF 23 种设计模式解析附 C++实现源码.pdf

    设计模式精解- GoF 23 种设计模式解析附 C++实现源码 目 录 0 引言 ...........................................................................................................................................

    小D深入浅出设计模式+框架源码剖析实战

    ├─第一章 旭瑶-小滴...│ 5.1-创建型设计模式-Prototype原型设计模式实战《上》.mp4 │ 5.2-创建型设计模式-Prototype原型设计模式实战《下》.mp4 │ 6.1-接口之间的桥梁-适配器设计模式你知道多少.mp4 │ 6.4

    设计模式--C++

    3.4 Prototype(原型)—对象创建型模式 87 3.5 Singleton(单件)—对象创建型模式 84 3.6 创建型模式的讨论 89 第 4 章 结构型模式 91 4.1 Adapter(适配器)—类对象结构型模式 92 4.2 Bridge(桥接)—对象结构...

    GoF 23种设计模式的详解与应用

    创建模式:设计模式之Factory,设计模式之Prototype(原型),设计模式之Builder,设计模式之Singleton(单态). 结构模式:设计模式之Facade(外观),设计模式之Proxy(代理),设计模式之Adapter(适配器),设计模式之Composite...

    设计模式面面观(10):桥接模式(Bridge Pattern)-结构型模式

    (100%) 设计模式面面观(5):抽象工厂模式(AbstractFactory)-创建型模式 (100%) 设计模式面面观(6):生成器模式(Builder)-创建型模式 (100%) 设计模式面面观(7):原型模式(Prototype)-...

    prototype-demo.zip

    原型模式-深复制与浅复制

    Java设计模式之Prototype原型模式

    主要为大家详细介绍了Java设计模式之Prototype原型模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Prototype Pattern原型模式

    原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

Global site tag (gtag.js) - Google Analytics