加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

23种设计模式之原型模式

发布时间:2020-12-13 20:56:50 所属栏目:百科 来源:网络整理
导读:原型模式的定义 定义: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 通俗的讲,就是不再使用new 来创建对象,而改用 clone 方法来得到新的对象 原型模式的核心是一个 clone 方法,通过该方法进行对象的拷贝,Java提供了一个Cloneable接口来

原型模式的定义

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

通俗的讲,就是不再使用new 来创建对象,而改用 clone 方法来得到新的对象

原型模式的核心是一个 clone 方法,通过该方法进行对象的拷贝,Java提供了一个Cloneable接口来标识这个对象是可拷贝的,为什么说是"标识" 呢? 翻开JDK的帮助看Cloneable是一个方法都没有的,这个接口只是一个标记作用,在JVM中具有这个标记的对象才有可能被拷贝. 如何从"有可能被拷贝" 转换成"可以被拷贝"呢?方法是覆盖 clone 方法.

原型模式的通用代码:

23种设计模式之原型模式

原型模式的应用

原型模式的优点

  1. 性能优良. 原型模式是在内存二进制流的拷贝,要比直接new 一个对象性能好很多,特别是要在一个循环体内产生大量的对象时,原型模式可以更好的体现其优点
  2. 逃避构造函数的约束. 这既是它的优点也是缺点,直接在内存中拷贝,构造函数是不会执行的. 优点是减少了约束,缺点也是减少了约束,需要在实际应用时考虑

原型模式的使用场景

  1. 资源优化场景. 类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等
  2. 性能和安全要求的场景. 通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式
  3. 一个对象多个修改者的场景. 一个对象需要提供给其它对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用.

在实际项目中,原型模式很少单独出现,一般是和工厂方法模式一起出现,通过clone的方法创建一个对象,然后由工厂方法提供给调用者.

原型模式的注意事项

  1. 构造函数不会被执行. 因为Object类的clone方法是从内存中以二进制流的方式进行拷贝,重新分配一个内存块,那构造函数没有执行也就十分正常了
  2. 浅拷贝和深拷贝. Object类提供的方法clone只是拷贝本对象,其对象内部的数组、引用对象等都不拷贝,还是指向原生对象的内部元素地址,这种拷贝就叫浅拷贝. 这时两个对象共享同一个变量,你改我也改,是一种非常不安全的方式. 那怎么实现深拷贝呢? 对类变量进行独立的拷贝即可. 这样两个对象你改你的,我改我的,互不影响.
  3. clone和final. 对象的clone与对象内的final是有冲突的. 对象的final变量不能拷贝

原型模式先生产出一个包含大量共有信息的类,然后可以拷贝出副本,修正信息,建立了一个玩完整的个性对象

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读