`

设计模式-Immutable

阅读更多

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

 

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

 

保持对象不可变的手段:

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

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

 

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

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

相关推荐

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

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

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

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

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

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

    java26个设计模式

    工厂模式Factory 原始Prototype 单例Singleton 建造Builder 多例Multiton 适配器Adepter 装饰Decorator 合成Composite 代理Proxy 享元Flyweight 门面Facade 桥梁Bridge 不变Immutable 策略Strategy 模版Template ...

    源码:阎宏设计模式光盘

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

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

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

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

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

    JavaConcurrencyPattern:Java并发模式

    这些文章已扩充为一本书:《Java多线程编程实战指南(设计模式篇)》,由电子工业出版社出版,当当、亚马逊、京东、互动出版网、淘宝等各大书店有售。 【样章】 Active Object模式: Immutable Object模式: Two-...

    nim-contra:通过合同编程和安全加固模式进行轻量级自文档设计

    nim-contra:通过合同编程和安全加固模式进行轻量级自文档设计

    chat-webapp:一个基于eggjs与react全家桶的移动端webapp

    MyQQ:一个基于egg.js和react全家桶的即时通讯移动端网页 项目概述: 一个具备聊天功能和空间的即时通讯软件。 源码地址: 如果您觉得对您有帮助,请您点个...该项目采用immer作为immutable数据流的实现 axios swiper

    react-blog:由react设计的个人博客

    前言在学习React的过程中,深深的被React的函数式编程的模式所吸引,一切都有组件,所有的东西都是JavaScript。React框架实际上功能很单一,主要负责渲染的功能,但是社区很活跃,个人觉得,想要做好一个项目,经常...

    Scala程序设计(第2版)

    23.4 设计模式 442 23.4.1 构造型模式 443 23.4.2 结构型模式 443 23.4.3 行为型模式 444 23.5 契约式设计带来更好的设计 446 23.6 帕特农神庙架构 448 23.7 本章回顾与下一章提要 453 第24章...

    mono:CSS没有副作用。 没有无节制的超越,专制性战争或级联冲突

    单核细胞增多症 CSS不会无节制地覆盖,特定性战争或级联冲突 ... Mono是一种旨在改进CSS开发的设计模式和语言。 Mono使CSS可预测,健壮并且易于推理。 它使开发人员可以放心地进行更改,而不会带来不必要的副作用。

    程序员考试刷题-bookmarks:我的随机书签,随便维护

    (设计)模式 BSD + 专利许可 我们将在 MIT 许可下重新许可我们的开源项目 React、Jest、Flow 和 Immutable.js 我们将在 React 16 的发布中包含许可证更新 公用事业 宇航员(现在是使用 git 的程序员)的指南,了解...

    Java的六大问题你都懂了吗

    因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。请看下列代码:  String s = "Hello";  s = s + " world!";  s所指向的对象是否改变了呢?从本系列第一篇的结论很容易导出这个结论...

    关键:用于SQL,数据记录和图形查询的通用二进制数据库

    无模式文档的双向索引为在顶部创建分层扩展提供了广泛的可能性,例如添加了额外的事务,查询和模式功能。 除了SQL,Crux还提供了查询接口,该接口可用于表示复杂的联接和递归图遍历。 快速链接 &lt; groupId&gt;juxt ...

Global site tag (gtag.js) - Google Analytics