重构——21将引用对象改为值对象(Change Reference to Value)

将引用对象改为值对象(Change Reference to Value)

你有一个引用对象,很小且不可改变,而且不容易管理;将它变为一个值对象

一、动机

1、引用对象变得难以使用,就把它变改为值对象

2、值对象有一个非常重要的特性,它们应该是不可变的

二、做法

1、检查重构目标是否为不可变对象,或是否可修改为不可变对象

2、建立equals()和hashcode()方法

3、编译,测试

4、考虑是否可以删除工厂函数,并将构造函数声明为public

时间: 2024-07-29 17:52:00

重构——21将引用对象改为值对象(Change Reference to Value)的相关文章

重构——20将值对象改为引用对象(Change Value to Reference)

将值对象改为引用对象(Change Value to Reference) 你从一个类衍生出许多彼此相等的实例,希望将它们替换为同一对象:将这个值对象变成引用对象 一.动机 1.系统中的对象可以分为引用对象和值对象,有时候,你会从一个简单的值对象开始,在其中保存少量的不可修改的数据.而后,你可能会希望给这个对象加入一些可修改数据,并确保对任何一个对象的修改都能影响到所有引用此一对象的地方,这时候,你就希望将这个对象变为一个引用对象 2.值对象和引用对象,不可变对象 3.引用对象每个对象代表真实世

聚合(根)、实体、值对象精炼思考总结

1.      聚合根.实体.值对象的区别? 从标识的角度: 聚合根具有全局的唯一标识,而实体只有在聚合内部有唯一的本地标识,值对象没有唯一标识,不存在这个值对象或那个值对象的说法: 从是否只读的角度: 聚合根除了唯一标识外,其他所有状态信息都理论上可变:实体是可变的:值对象是只读的: 从生命周期的角度: 聚合根有独立的生命周期,实体的生命周期从属于其所属的聚合,实体完全由其所属的聚合根负责管理维护:值对象无生命周期可言,因为只是一个值: 2.      聚合根.实体.值对象对象之间如何建立关联

对象-java传递 ”值传递和引用传递“还是全部 “值传递”

问题描述 java传递 "值传递和引用传递"还是全部 "值传递" 若说值传递.基本类型是copy的值赋给形参,对象是把 堆中对象的 地址 传给 形参. 若说分为值传递和引用传递..引用传递 是因为这个传的地址,导致实参和形参 操作的都是同一块内存. 有点乱,像文字层次上的撕逼.. 若往引用传递方面思考,C++的指针又把我搅乱了.,java里不能直接管理内存,传递的不是 变量本身 的栈地址.而是变量的内容(值) 解决方案 java没有什么值传递引用传递,都是传递对象引

数据、事实、实体、值对象、事务、不变性

数据有两个重要属性:首先数据是基于时间的,数据是表达一段时间内一个逻辑为真的事实.另外一个属性是数据本质上是不可变的,因为和时间有关,我们是不能回到过去改变数据的真实性.这两个属性就意味着:对数据你其实只有两个主要的操作:读取现有数据,并(随着时间)添加更多新的数据,CRUD(增删改查)称为CR(增读).这样,CRUD其实没有U修改,因为修改对不可变数据是不其作用的(非常类似DDD中值对象不可变,不能修改,只能更换).CRUD中也没有删除Delete,其实大部分删除其实是一种创建新数据,如果Bo

Java---设计模块(值对象)

场景和问题 在Java开发时,需要来回交换大量的数据,比如要为方法传入参数,也要获取方法的返回值,该如何能更好的进行数据的交互? 基本的编写步骤 ◎第1步:写一个类,实现可序列化(如果以后数据是往数据库里存的,那么可以不序列化,节省资源) ◎第2步:私有化所有属性,保持一个默认构造方法(public无参) ◎第3步:为每个属性提供get().set()方法(如果是boolean型变量,最好把get改成is) ◎第4步:推荐覆盖实现equals().hashCode()和toString()方法

(一二四)给类对象赋值、以及类对象的返回值

于直接给对象赋值: 之前学过,如何给对象在初始化时进行赋值. 对于C++11来说,初始化方式有三种: ① man c = man{ "cc",1 }; ② man d = { "dd",1 }; ③ man f{ "ff",1 };   假如有一类M,他有两个私有成员a和b(int类型). 于是新建一对象M q; 对象q使用默认构造函数(假如都赋值为0,这个不重要): 现在,我们想给对象q的第一个私有成员赋值,该怎么办? 这章刚学过运算符重载,难

经典中的品味:第二章 C++基本的对象,类型和值(上)

2.1 一个简单问候的例子 最常见的就是keyBorad input(键盘输入).从HelloWorldd的输出,我们也想得到用户的输入.通常,实行中的程序会给它的输入产生输出.例如,输入你的名字,输出 一句问候.有时候它就在身边,像我最爱的苹果手机一样.人机交互就是那么简单~ 图2.1.1 人机交互(.net) 回 到技术点,为了读取用户输入的数据,我们需要在计算机内存中某个地方放置读取所需的内容.这就是对象(Class).对象是什么,对象时一个某种类型的内 存区域.其中类型则确定了对象的信息

Javascript 中关于对象转换数字值的一些特点

下面是摘至<Javascript 高级程序设计第三版>里的一段话 是关于对象转换数字值的一些规则 "在应用于对象时,先调用对象的valueOf()方法以取得一个可供操作的值.然后对该值应用前述规则.如果结果是NaN,则在调用toString()方法后再应用前述规则...." 通过上面的描述,我们知道,当需要把对象转换成数字值时,先调用valueOf方法,假如返回NaN,则再调用对象的toString方法. 所以写了下面的测试代码. var a={ valueOf:funct

JavaScript 类的定义和引用 JavaScript高级培训 自定义对象_js面向对象

一,概述 在Java语言中,我们可以定义自己的类,并根据这些类创建对象来使用,在Javascript中,我们也可以定义自己的类,例如定义User类.Hashtable类等等. 目前在Javascript中,已经存在一些标准的类,例如Date.Array.RegExp.String.Math.Number等等,这为我们编程提供了许多方便.但对于复杂的客户端程序而言,这些还远远不够. 与Java不同,Java2提供给我们的标准类很多,基本上满足了我们的编程需求,但是Javascript提供的标准类很