`
hanlingbo2008
  • 浏览: 80173 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

不变(Immutable)模式

阅读更多

10、不变(Immutable)模式

  

     定义: 一个对象的状态在对象被创建之后就不在发生变化,这就是Immutable Pattern。

 

     不变模式分:强不变模式和弱不变模式

     

      弱不变模式:一个类的实例状态是不变的,但是这个类的子类实例具有可能会变化的状态。

      强不变模式:一个类的实例状态是不变的,这个类的子类实例也具有不可变化的状态。实现的途径是类所有的方法都是 final类型,或者类本身就是final的

 

    java.lang.String 类就是强不变类。

    String a = "abc" ;

    String a1 = "abc" ;

    String a2 = "abc" ;

     String a3 = "abcd" ;

   java虚拟机只会创建一个字符串实例,三个对象共享一个值。遇到不同的字符串,java虚拟机会在创建一个String对象。

 

     例子:一个类的完整代码如下,请问这个类是不是不变类?

 

   

public class BClass {
	private int state = 0;
	
	public int getState(){
		return this.state;
	}
	
	public void setState(){
		System.out.println("Parameter is " + this.state);
	}
}

 

 这个类是个弱不变类,这个类有一个状态,存储在Int原始类型的state属性里面, 粗看上去有个方法setState(), 但是这个方法实际上并不能修改state,所以该类实际是个不变类。但是该类的子类可以修改state,因为setState()方法不是final,而且类也不是final类,所以该类是弱不变类。

 

分享到:
评论

相关推荐

    java26个设计模式

    工厂模式Factory 原始...不变Immutable 策略Strategy 模版Template 观察者Observer 命令Command 备忘录Memento 状态State 访问者Visitor 解释器Interpreter 调停者Mediator Iterator 责任链Chain of Responsibility

    源码:阎宏设计模式光盘

    com.javapatterns.immutable 不变模式 com.javapatterns.interfaces Java接口 com.javapatterns.interpreter 解释器模式 com.javapatterns.isp 接口隔离原则 com.javapatterns.iterator 迭代子模式 ...

    21-C-ImmutableObject-Code.zip

    这是关于不可变对象模式的初学者教程,其中包含C#中的示例。我们讨论“内部不变性”与“观察不变性”等主题。

    immutable-state-helper:用于React.js的Immutable.js辅助函数

    不变的状态帮手安装npm install immutable-state-helpercreateImmState setState模式的辅助函数。 从复制和修改。签名createImmState(thisArg, [field], [callback]): Function争论thisArg(*):React Element的...

    immutable-enumerables

    不可枚举的样式利用了一些现代JavaScript功能以及功能编程语言已经使用了很长时间的完善模式。 尽管使用此样式定义的类型缺乏完全的不变性,但它们还避免了Object.freeze功能JavaScript性能问题。 让我们直接进入并...

    dart-immutables

    用户可以绑定实现其包装类接口的包装器(以与选中模式配合使用)。 正在考虑将明确列入白名单的方法支持为非变异的。 什么是不变的? 该库假定有几个调用未改变其目标: 吸气剂:一般而言,不应突变靶标。 请注意...

    bistate:一个用于React的不可变,可变和React模式组合的状态管理库

    欢迎来到Bistate :waving_hand: 通过简单地修改当前树来创建下一个不可变状态树bistate是一个很... immutable state + scapegoat state =双态不可变的目标被代理冻结替罪羊具有与不变目标相同的值mutate(()=> { the_

    Java的六大问题你都懂了吗

    其实上面的功能要求用方法重载完全可以实现,这是面向对象变成应有的做法,避免回到结构化编程模式。只要提供两个名字和返回值都相同,接受参数类型不同的方法就可以了:所以,使用instanceof在绝大多数情况下并不是...

    Scala程序设计(第2版)

    12.1.5 collection.immutable包 291 12.1.6 scala.collection.mutable包 292 12.1.7 scala.collection.parallel包 294 12.2 选择集合 295 12.3 集合库的设计惯例 296 12.3.1 Builder 296 12.3.2 ...

    Guava 16.0 API (CHM格式)

    Immutable collections(不变的集合): 防御性编程, 不可修改的集合,并且提高了效率。  2. New collection types(新集合类型):JDK collections 没有的一些集合类型,主要有:multisets,multimaps,tables, ...

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

    它使用不变性来消除通常与CSS相关的副作用! Mono是一种旨在改进CSS开发的设计模式和语言。 Mono使CSS可预测,健壮并且易于推理。 它使开发人员可以放心地进行更改,而不会带来不必要的副作用。

    php-slang:PHP与函数式编程相遇的地方

    模式匹配 记忆化 不可变的HashMap集合 不可变集集合 提取器 尝试monad 未来单子 并行不可变列表集合 并行不变HashMap集合 并行不可变集合集合 可遍历的集合 无限精度的数值类型 Chainable \ pipe monad ...

Global site tag (gtag.js) - Google Analytics