美文网首页
PrototypePattern原型模式

PrototypePattern原型模式

作者: jeff_chang_liu | 来源:发表于2020-08-13 22:44 被阅读0次

原型模式

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关键字。

相关文章

  • Android 设计模式入门到精通之四:原型模式(Prototy

    原型模式(PrototypePattern) 1. 概念 Specify the kinds of objects...

  • PrototypePattern原型模式

    原型模式 1.定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 Java自带一个Cloneab...

  • 设计模式之原型模式 PrototypePattern

    一、模式定义 通过复制现有实例来创建新的实例,无需知道相应类的信息。 二、模式使用场景 类初始化需要消耗非常多的资...

  • 第3章 创建型模式-原型模式

    一、原型模式简介 二、原型模式的优点 ■ 三、原型模式的使用场景 ■ 四、原型模式的实例

  • 设计模式之原型模式(Prototype 模式)

    引入原型模式 原型模式的实例 为什么需要使用原型模式 引入原型模式 如果读者很熟悉javascript的话,对原型...

  • 初始设计模式之原型模式

    原型模式是什么? 原型模式怎么用?浅拷贝深拷贝 原型模式再理解 一、原型模式是什么? ​ 原型模式是一种创建型设计...

  • 设计模式之原型模式(创建型)

    [TOC] 模式定义 原型模式(Prototype Pattern):原型模式是提供一个原型接口,提供原型的克隆,...

  • 原型模式C++

    原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型模式结构图 原型模式基本代码 原型...

  • 设计模式:原型

    原型模式基本介绍原型模式的实现源码中的原型模式记录 原型模式基本介绍 定义:用原型实例指定创建对象的种类,并通过复...

  • js集成

    原始继承模式--原型链 2:借用构造函数 3:共享构造原型 4:圣杯模式原型链; 构造函数; 共享原型; 圣杯模式...

网友评论

      本文标题:PrototypePattern原型模式

      本文链接:https://www.haomeiwen.com/subject/rpcwdktx.html