热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于设计模式:设计模式之原型模式

如果对象的创立老本比拟大,而同一个类的不同对象之间差异不大(大部分字段都雷同),在这种状况下,咱们能够利用对已有对象(原型)进行复制(或者叫拷贝)的形式来创立新对象,以达到节俭创立工夫的目标。

应用场景

如果 对象的创立老本比拟大,而 同一个类的不同对象之间差异不大(大部分字段都雷同),在这种状况下,咱们能够利用对已有对象(原型)进行复制(或者叫拷贝)的形式来创立新对象,以达到节俭创立工夫的目标。

何为“对象的创立老本比拟大”?

如果对象中的数据须要通过简单的计算能力失去(比方排序、计算哈希值),或者须要从 RPC、网络、数据库、文件系统等十分慢速的 IO 中读取,这种状况下,咱们就能够利用原型模式,从其余已有对象中间接拷贝失去,而不必每次在创立新对象的时候,都反复执行这些耗时的操作。

原型模式的实现形式:深拷贝和浅拷贝

要应用原型模式,咱们就须要对对象进行拷贝,这里咱们要先理解下深拷贝和浅拷贝。

浅拷贝和深拷贝的区别在于,浅拷贝只会复制数据的内存地址,而深拷贝会复制数据自身。因而,浅拷贝与原始对象共享数据对象,原始对象如果批改了数据值,拷贝的对象也会变为新的值;而深拷贝失去的是一份完完全全独立的对象,不会受原对象影响。

在 Java 语言中,Object 类的 clone() 办法执行的就是咱们刚刚说的浅拷贝。它只会拷贝对象中的根本数据类型的数据(比方,int、long),以及援用对象的内存地址,不会递归地拷贝援用对象自身。

那如何实现深拷贝呢?

  • 递归拷贝对象、对象的援用对象以及援用对象的援用对象……直到要拷贝的对象只蕴含根本数据类型数据,没有援用对象为止。
  • 先将对象序列化,而后再反序列化成新的对象。

推荐阅读
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 在PHP的设计中,预定义了9个超级全局变量、8个魔术变量和13个魔术函数,这些变量和函数无需声明即可在脚本的任意位置使用。这些特性在PHP开发中极为常见,能够显著提升开发效率和代码的灵活性。相比之下,Java并没有类似的内置机制,但通过其他方式如上下文对象和反射机制,也可以实现类似的功能。本文将详细探讨这两种语言中这些特殊变量和函数的使用方法及其应用场景。 ... [详细]
  • JVM钩子函数的应用场景详解
    本文详细介绍了JVM钩子函数的多种应用场景,包括正常关闭、异常关闭和强制关闭。通过具体示例和代码演示,帮助读者更好地理解和应用这一机制。适合对Java编程和JVM有一定基础的开发者阅读。 ... [详细]
  • 本文总结了Java初学者需要掌握的六大核心知识点,帮助你更好地理解和应用Java编程。无论你是刚刚入门还是希望巩固基础,这些知识点都是必不可少的。 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 深入解析HTML5字符集属性:charset与defaultCharset
    本文将详细介绍HTML5中新增的字符集属性charset和defaultCharset,帮助开发者更好地理解和应用这些属性,以确保网页在不同环境下的正确显示。 ... [详细]
  • 本文详细介绍了如何在 Django 项目中使用 Admin 管理后台,包括创建超级用户、启动项目、管理数据模型和修改用户密码等步骤。 ... [详细]
author-avatar
手机用户2602910191_702
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有