PrototypePattern原型模式

原型模式

1.定义

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象

Java自带一个Cloneable接口,原型类实现该接口并重写clone方法,通过调用该方法创建新的对象。这种不通过new关键字来产生一个对象,而是通过对象复制来实现的模式叫做原型模式。

原型类

public class PrototypeClass implements Cloneable {

    @Override
    protected Object clone() {

        PrototypeClass prototypeClass = null;

        try {
            prototypeClass = (PrototypeClass) super.clone();
        } catch (CloneNotSupportedException cloneNotSupportedException) {
            // TODO 异常处理
        }

        return prototypeClass;
    }
}

2.应用

2.1 优点

  • 性能良好:原型模式是在内存二进制流的拷贝,比直接使用new关键字创建对象性能好很多。
  • 逃避构造函数的约束:直接在内存中拷贝,不会执行其构造函数,因此也是缺点。

2.2 使用场景

  • 资源优化场景:类初始化需要消耗非常多的资源。
  • 性能和安全要求
  • 一个对象多个修改者的场景

实际项目中,原型模式很少单独出现。一般和工厂方法模式结合使用,通过clone方法创建对象,并由工厂方法提供给调用者。

3.注意事项

3.1 构造函数不会被执行

即逃避构造函数的约束。

3.2 浅拷贝和深拷贝

若原型类中存在属性为引用对象类型时,Java做了一个偷懒的拷贝动作,Object类提供的方法只是clone本对象,对其内部的数组,引用对象等都不拷贝,还是指向原生对象的地址,即引用赋值而不是对象赋值,而基本类型都会被拷贝,这种拷贝就叫做浅拷贝。对于String类型,没有clone方法,通过字符串池在内存中创建新字符串,因此使用时String同基本类型效果一致。

想实现对象的深入拷贝需要在原型类的clone方法中对引用类型的对象属性再次调用clone方法。

3.3 clone与final

对象的clonefinal关键字是有冲突的,要使用clone方法,原型类的成员变量上不要增加final关键字。

(0)

相关推荐

  • 结合JDK源码看设计模式——原型模式

    定义: 指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.不需要知道任何创建的细节,不调用构造函数 适用场景: 类初始化的时候消耗较多资源 new产生的对象需要非常繁琐的过程 构造函数比 ...

  • 五分钟 掌握 原型模式 (文末送书)

    回复"000"获取程序员必备电子书 大家好,我是老田,今天我给大家分享设计模式中的原型模式.用贴切的生活故事,以及真实项目场景来讲设计模式,最后用一句话来总结这个设计模式. 关于设 ...

  • 创建型模式————原型模式(2.3)

    什么是原型模式? 简单来说,通过复制的方式创建对象.(被复制的对象可以理解为模板) 原型模式的应用场景 复杂结构对象的创建. 复杂结构对象:可以理解为对象里面还有对象. [举个栗子]:点外卖的收货地址 ...

  • 23种设计模式之原型模式

    原型模式 1.基本介绍 1)原型模式(Prototype模式)是指:用原型实例指定创建对象的种类,并通过拷贝这些原型,创建新的对象. 2)原型模式是一种创建型设计模式,允许一个对象再创建另一个可定制的 ...

  • 设计模式-原型模式

    原型模式 ​原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,并且通过拷贝这些原型创建新的对象 ​调用者不需要知道任何创建细节,不调用构造函数 ​其属于一种创建型模式 通用类图 优点 性能 ...

  • PHP设计模式之原型模式

    PHP设计模式之原型模式 原型模式其实更形象的来说应该叫克隆模式.它主要的行为是对对象进行克隆,但是又把被克隆的对象称之为最初的原型,于是,这个模式就这样被命名了.说真的,从使用方式来看真的感觉叫克隆 ...

  • [js] 第109天 请描述下什么是原型模式?它主要运用在哪些场景?

    今日试题: 请描述下什么是原型模式?它主要运用在哪些场景? 此开源项目四大宗旨:勤思考,多动手,善总结,能坚持 <论语>,曾子曰:"吾日三省吾身"(我每天多次反省自己) ...

  • [PHP小课堂]PHP设计模式之原型模式

    [PHP小课堂]PHP设计模式之原型模式 关注公众号:[硬核项目经理]获取最新文章 添加微信/QQ好友:[DarkMatterZyCoder/149844827]免费得PHP.项目管理学习资料

  • 创建型模式之原型模式

    定义与特点 原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象. 在这里,原型实例指定了要创建的对象的种类.用这种方式创建对象 ...

  • 原型模式

    序言:今天我们来聊一下原型模式,我个人认为原型模式的命名不太好理解,称呼其为克隆模式会更妥当一点.原型模式的目的是通过复制一个现有的对象来生成一个新的对象,而不是通过实例化的方法. 原型模式的基本介绍 ...

  • Prototype原型模式

    >>返回<C#常用设计模式> 1. 简介 2. 示例 3. 优缺点 3.1. 优点 3.2. 缺点 3.3. 原型模式的适用环境 1. 简介 定义 使用原型实例指定待创建对象的 ...

  • 大白话原型模式(Prototype Pattern)

    意图 原型模式是创建型设计模式,可以复制已存在的对象而无需依赖它的类. 问题 假如现在有一个对象,我们想完全复制一份新的,我们该如何做? 创建同一个类的新对象 遍历所有已存在对象的值,然后将他们的值复 ...