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

简介: 将值对象改为引用对象(Change Value to Reference):你从一个类衍生出许多彼此相等的实例,希望将它们替换为同一对象;将这个值对象变成引用对象

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

你从一个类衍生出许多彼此相等的实例,希望将它们替换为同一对象;将这个值对象变成引用对象

一、动机

1、系统中的对象可以分为引用对象和值对象,有时候,你会从一个简单的值对象开始,在其中保存少量的不可修改的数据。而后,你可能会希望给这个对象加入一些可修改数据,并确保对任何一个对象的修改都能影响到所有引用此一对象的地方,这时候,你就希望将这个对象变为一个引用对象

2、值对象和引用对象,不可变对象

3、引用对象每个对象代表真实世界的一个实物,你可以直接以“==”检查两个对象是否相等。

4、值对象像是“钱”、“日期”这样的东西,它们完全由其所含的数据值来定义,你并不在意副本的存在。

二、做法

1、使用Replace Constructor with Factory Method

2、编译,测试

3、决定由什么对象负责提供访问新对象的途径

4、决定这些引用对象应该预先创建好,或者是应该动态创建

5、修改工厂函数,令它返回引用对象

6、编译,测试

目录
相关文章
|
6月前
|
Java 开发者
JDK 21中的记录模式(Record Patterns):简化对象匹配与解构
本文将详细介绍JDK 21中引入的新特性——记录模式(Record Patterns)。记录模式是一种强大的语言特性,它允许开发者在switch表达式中使用简化的语法来匹配和解构记录类型(record types)。本文将解释记录模式的概念、语法、使用场景以及与传统模式匹配的区别,并通过示例代码展示记录模式在实际开发中的应用。
对象的相等和引用相等的区别
对象的相等和引用相等的区别
|
编译器 C语言 C++
14 C++ - 引用(reference)
14 C++ - 引用(reference)
60 0
|
存储 安全 编译器
02-📝C++核心语法|C++对C的扩展【::作用域运算符、名字控制、struct类型加强、C/C++中的const、引用(reference)、函数】
复习`C++核心语法`,且适当进行汇编探索底层实现原理,进一步夯实基础,为以后的`底层开发`、`音视频开发`、`跨平台开发`、`算法`等方向的进一步学习埋下伏笔。
02-📝C++核心语法|C++对C的扩展【::作用域运算符、名字控制、struct类型加强、C/C++中的const、引用(reference)、函数】
|
存储 编译器 C#
《More effective C#》第二章 尽量采用隐式属性来表示可变的数据
《More effective C#》第二章 尽量采用隐式属性来表示可变的数据
|
JSON Java 数据库
代码重构实战-将值对象改为引用对象(Change Value to Reference)
一个数据结构中可能包含多个记录,而这些记录都关联到同一个逻辑数据结构。例如,我可能会读取一系列订单数据,其中有多条订单属于同一个顾客。遇到这样的共享关系,既能将顾客信息作为值对象看待,也能将其视为引用对象
102 0
|
JSON C# 数据格式
C# 使用dynamic类型来访问JObject对象
原文:C# 使用dynamic类型来访问JObject对象 dynamic是C#里面的动态类型,可在未知类型的情况访问对应的属性,非常灵活和方便。 使用Json.Net可以把一个Json字符串转换成一个JObject对象,如果有已知强类型,如果有已知对应的强类型,可以直接转成对应的类型。
1364 0
|
存储 C++ 块存储
C++对象的复制——具有指针成员的类的对象的复制
//smartvessel@gmail.com class Table{Name * p;size_t sz;publish:Table(size_t s = 15){p = new Name[sz=s];}~Table(){delete[]p ;}.
954 0
重构——21将引用对象改为值对象(Change Reference to Value)
将引用对象改为值对象(Change Reference to Value):你有一个引用对象,很小且不可改变,而且不容易管理;将它变为一个值对象
1414 0