美文网首页
原型模式

原型模式

作者: _fan凡 | 来源:发表于2019-03-26 23:53 被阅读0次

原型模式定义如下:

Specify the kinds of objects to create using a prototypical instance,and create new objects by copying this prototype.

用原型实例指定待创建对象的种类,并通过拷贝该原型对象来创建新的对象。

用再通俗直白的话来说,就是创建对象不是通过new关键字来创建,而是通过对对象的复制来实现,这样的模式就是原型模式。

原型模式的通用类图如下:

原型模式的核心就是clone方法,实现Cloneable接口即可。

原型模式优点:

1.性能优良:原型模式是在内存二进制流的拷贝,比直接new一个对象性能要好很多。

2.避免构造函数的约束:这既可以认为是优点,也可以认为是缺点,直接在内存中拷贝,构造函数是不会执行的。

Object类的clone方法的原理是从内存中(具体的说是堆内存)以二进制的方式进行拷贝,重新分配一个内存块。所以构造函数没有被执行也是很正常了。

浅拷贝和深拷贝

浅拷贝:Object类提供的方法clone只是拷贝对象,其对象内部的数组、引用对象等都不拷贝,还是指向原声对象的内部元素地址,这种拷贝就叫做浅拷贝。也就是说对象内部如果有数组、引用对象等应用类型,那么在clone出来的对象和原对象中的数组等引用类型是同一个对象。并不是新的内存地址。

那么浅拷贝引发的问题就是,对原对象或者clone出来的对象中的引用类型进行修改,都会引起另一方对象中的引用类型对象的改变。

浅拷贝其实是基本数据类型和String(在这里String类型可以认为是基本数据类型)类型都会被拷贝,数组、对象等引用类型的对象直接还是使用的原来对象的堆内存地址

深拷贝:深拷贝当然就是在浅拷贝的基础上,对引用对象也进行拷贝,也就是clone出来的对象和原对象中的引用类型是不同的对象,内存地址都变了的。实现深拷贝,就是要在clone方法中对引用对象重新clone一次。

注意事项:

要使用clone方法,不要用final修饰成员变量。

相关文章

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

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

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

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

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

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

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

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

  • 原型模式C++

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

  • 设计模式:原型

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

  • js集成

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

  • 关于JavaScript创建对象的多种方式

    JavaScript创建对象的方法 工厂模式 构造函数模式 原型模式 组合使用构造函数模式和原型模式 动态原型模式...

  • 前端面试题总结【37】:javascript对象的几种创建方式

    工厂模式 构造函数模式 原型模式 混合构造函数和原型模式 动态原型模式 寄生构造函数模式 稳妥构造函数模式 推荐:...

  • 设计模式之原型模式

    原型模式 原型模式(prototype)是指原型实例指向对象的种类,并且通过拷贝这些原型创建新的对象 模式作用: ...

网友评论

      本文标题:原型模式

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