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类,所以该类是弱不变类。
分享到:
相关推荐
工厂模式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 迭代子模式 ...
这是关于不可变对象模式的初学者教程,其中包含C#中的示例。我们讨论“内部不变性”与“观察不变性”等主题。
不变的状态帮手安装npm install immutable-state-helpercreateImmState setState模式的辅助函数。 从复制和修改。签名createImmState(thisArg, [field], [callback]): Function争论thisArg(*):React Element的...
不可枚举的样式利用了一些现代JavaScript功能以及功能编程语言已经使用了很长时间的完善模式。 尽管使用此样式定义的类型缺乏完全的不变性,但它们还避免了Object.freeze功能JavaScript性能问题。 让我们直接进入并...
用户可以绑定实现其包装类接口的包装器(以与选中模式配合使用)。 正在考虑将明确列入白名单的方法支持为非变异的。 什么是不变的? 该库假定有几个调用未改变其目标: 吸气剂:一般而言,不应突变靶标。 请注意...
欢迎来到Bistate :waving_hand: 通过简单地修改当前树来创建下一个不可变状态树bistate是一个很... immutable state + scapegoat state =双态不可变的目标被代理冻结替罪羊具有与不变目标相同的值mutate(()=> { the_
其实上面的功能要求用方法重载完全可以实现,这是面向对象变成应有的做法,避免回到结构化编程模式。只要提供两个名字和返回值都相同,接受参数类型不同的方法就可以了:所以,使用instanceof在绝大多数情况下并不是...
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 ...
Immutable collections(不变的集合): 防御性编程, 不可修改的集合,并且提高了效率。 2. New collection types(新集合类型):JDK collections 没有的一些集合类型,主要有:multisets,multimaps,tables, ...
它使用不变性来消除通常与CSS相关的副作用! Mono是一种旨在改进CSS开发的设计模式和语言。 Mono使CSS可预测,健壮并且易于推理。 它使开发人员可以放心地进行更改,而不会带来不必要的副作用。
模式匹配 记忆化 不可变的HashMap集合 不可变集集合 提取器 尝试monad 未来单子 并行不可变列表集合 并行不变HashMap集合 并行不可变集合集合 可遍历的集合 无限精度的数值类型 Chainable \ pipe monad ...