`

设计模式-Immutable

阅读更多

不变设计模式:不变模式的用意是对象生成之后就不能再改变了

 

尤其在多并发程序中:为确保数据的一致性和正确性,又必要对对象进行同步,但是同步操作对系统性能有相当的损耗。因此可以使用一种不可改变的对象,依靠其不变形来确保并行操作在没有同步的情况下依旧保持一致性和正确性。

 

保持对象不可变的手段:

1、基本类型 ,final修饰 或者 不提供set方法

2、引用类型(包括集合类型),深copy(容器类)

 

举例:guava中有不变模式的实现:

com.google.common.collect.ImmutableList<E>
com.google.common.collect.ImmutableMap<K, V>
除了初始化操作外,所有修改操作都被屏蔽了(抛UnsupportedOperationExceptio)
其他:在接口的数据暴露的情况中,如果不希望返回的数据被修改,可以使用不变模式,如果有人用错了也可以提前发现问题。
分享到:
评论

相关推荐

    21-C-ImmutableObject-Code.zip

    在编程领域,不可变对象(Immutable Object)是一种重要的设计模式,尤其在多线程和并发环境中,它提供了安全性和性能优化。在这个初学者教程中,我们将深入探讨C#中的不可变对象,包括“内部不变性”和“观察不变性...

    前端开源库-immutable-require-valid-log-client

    这种设计模式在处理复杂数据结构、优化性能以及简化并发编程时尤其有用。 日志客户端在软件开发中扮演着至关重要的角色,用于收集、记录和分析应用程序运行时的信息。"immutable-require-valid-log-client"强调对...

    todomvc-with-flux-immutable:带有 Flux 和 ImmutableJS 的 TODOMVC

    Flux是Facebook为了解决在大型React应用中管理状态和数据流问题而提出的一种设计模式。它强调单向数据流,使得应用的状态变化更加可控和可追踪。在Flux中,数据从服务器流向Store(存储),然后通过Actions(动作)...

    java8源码-GraphicMultiThreadDesignPattern:图解Java多线程设计模式

    记录自己学习《图解Java多线程设计模式》这本书的全部过程 本书上传的所有代码都是可以运行的,在此附上本书源码地址: 在此向本书作者和译者表示感谢 运行环境 Eclipse版本:Oxygen.2 Release (4.7.2) JDK版本:jdk...

    relay-global-immutable-store:玩转全球商店的概念,类似于 Relay,具有一些离线和最终一致的功能

    这种设计模式通常与 functional programming(函数式编程)中的思想相吻合,能够提供更好的可预测性,减少副作用,并简化时间旅行调试。 离线功能是 Relay Global Immutable Store 的另一大亮点。在现代应用中,...

    java多线程设计模式详解(PDF及源码)

    本书浅显易懂的介绍了JAVA线程相关的设计模式,通过程序范例和UML图示来一一解说,书中代码的重要部分加了标注以使读者更加容易理解,再加上图文并茂,对于初学者还是程序设计高手来说,这都是一本学习和认识JAVA...

    ImmutableArray原型方法Per方法包的集合

    通常,阅读源码可以帮助开发者了解如何在自己的项目中实现类似的功能,或者学习作者的编程技巧和设计模式。 总结来说,`ImmutableArray`的`Per`方法是用于生成不可变数组的所有可能排列的工具,这在需要探索所有...

    82丨开源实战三(中):剖析GoogleGuava中用到的几种设计模式1

    在本篇中,我们将深入探讨Guava中使用的三种设计模式:Builder模式、Wrapper模式以及Immutable模式。 ### 1. Builder模式 Builder模式在Guava中主要用来构建复杂对象,例如在`...

    immutable-utils:immutable.js 的有用扩展

    "不可变的工具,immutable.js 的有用扩展" 描述简单明了,它强调 `immutable-utils` 是一套与不可变数据处理相关的工具,特别设计来补充和扩展 `immutable.js` 的功能。这意味着 `immutable-utils` 可能包含了针对不...

    java多线程设计模式 (PDF中文版, 附源码)

    目录: 漫谈UML Introduction 1 Java语言的线程 Introduction 2 多线程...总结 多线程程序设计的模式语言 附录A 练习问题的解答 附录B Java的内存模型 附录C Java线程的优先级 附录D 线程相关的主要API 附录E 参考文献

    Android设计模式原型模式应用简单Demo

    在Android开发中,设计模式是提升代码可读性、可维护性和可扩展性的重要工具。原型模式(Prototype Pattern)作为GOF设计模式之一,是一种创建型模式,它提供了一种复制已有对象而不必知道其具体类别的方法。在这个...

    源码:阎宏设计模式光盘

    com.javapatterns.javaio 专题:设计模式在Java I/O中的应用 com.javapatterns.keygen 专题:序列键生成器与单例及多例模式 com.javapatterns.liskov 里氏代换原则 com.javapatterns.lod 迪米特法则 ...

    高效安全的Immutable List好处.docx

    这种设计模式在多线程环境和安全性需求较高的场景下非常有用,因为它天然具备线程安全性和防止意外修改的特性。 线程安全:由于 Immutable List 不可变,所以在多线程环境中,多个线程可以共享同一个实例而无需担心...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第二阶段20讲、多线程不可变对象设计模式Immutable-下.mp4 │ 高并发编程第二阶段21讲、多线程Future设计模式详细介绍-上.mp4 │ 高并发编程第二阶段22讲、多线程Future设计模式详细介绍-下.mp4 │...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第二阶段20讲、多线程不可变对象设计模式Immutable-下.mp4 │ 高并发编程第二阶段21讲、多线程Future设计模式详细介绍-上.mp4 │ 高并发编程第二阶段22讲、多线程Future设计模式详细介绍-下.mp4 │...

    druid 源码分析 逐层详解

    Druid的开发团队运用了工厂模式、建造者模式、代理模式、装饰者模式等经典设计模式,以解决代码复用、模块解耦、灵活配置等问题。分析源码时,我们可以看到各种设计模式的影子,理解这些模式是如何帮助开发者构建...

    Effective Objective-C 2.0

    10. 设计模式:Objective-C开发者在设计应用程序时,经常会用到设计模式。书中会介绍如何运用这些模式,例如单例模式、工厂模式、代理模式和观察者模式等,来优化代码结构和复用代码。 11. 与Cocoa框架的交互:...

    基于 Immutable.js 实现撤销重做功能的实例代码

    综上所述,本文通过一个具体的在线画图工具实例,展示了如何利用Immutable.js和自底向上的设计思路实现撤销重做功能。这种方式不仅适用于Redux应用,也适用于其他任何需要管理状态变化的前端项目。通过这种方式,...

    redux

    Redux 提供了一种中心化的数据管理模式,使得应用的状态可以在任何组件中被访问和更新,同时保持数据流的一致性。这个库的设计灵感来源于 Flux 架构和 Elm 模型。 Redux 的核心理念是“单一数据源”和“纯函数”。...

Global site tag (gtag.js) - Google Analytics