重构——40引入Null对象(Introduce Null Object)

简介: 引入Null对象(Introduce Null Object):你需要再三检查某对象是否为null;将null值替换为null对象

引入Null对象(Introduce Null Object)

你需要再三检查某对象是否为null;将null值替换为null对象

一、动机

1、多态最根本的好处在于:你不必在向对象询问“你是什么类型”而后根据得到的答案调用对象的某个行为--你只管调用就是了,其它的一切多态机制会为你安排妥当

2、null对象一定是常量,可以使用Singleton来实现它们

3、关于Null对象模式,你可以在Woolf[Woolf]中找到更详细的介绍

二、做法

1、为源类建立一个子类,使其行为就像是源类的null版本。在源类和null子类中都加上isNull()函数

2、编译

3、找出所有“索取源对象却获得一个null”的地方。修改这些地方,使他们改而获得一个空对象

4、找出所有“将源对象和null作比较”的地方。修改这些地方,使他们调用isNull()函数

5、编译,测试

6、找出这样的程序点:如果对象不是null,做A动作,否则做B动作

7、对于每一个上述地点,在null类中覆写A动作,使其行为和B动作相同

8、使用上述被覆写的动作,然后删除掉“对象是否等于null”的条件测试

9、编译并测试

目录
相关文章
|
2月前
ES6中map对象的使用,确实比Object好使哈
ES6中Map对象的使用优势,包括任意类型作为键、直接获取大小、增删查改操作等。Map的键可以是函数、对象、NaN等,支持forEach循环和for...of循环。
30 1
ES6中map对象的使用,确实比Object好使哈
|
1月前
|
Python
通过 type 和 object 之间的关联,进一步分析类型对象
通过 type 和 object 之间的关联,进一步分析类型对象
55 3
|
1月前
|
JavaScript 前端开发 大数据
在JavaScript中,Object.assign()方法或展开语法(...)来合并对象,Object.freeze()方法来冻结对象,防止对象被修改
在JavaScript中,Object.assign()方法或展开语法(...)来合并对象,Object.freeze()方法来冻结对象,防止对象被修改
15 0
|
3月前
|
数据安全/隐私保护
作用域通信对象:session用户在登录时通过`void setAttribute(String name,Object value)`方法设置用户名和密码。点击登录按钮后,跳转到另外一个页面显示用户
该博客文章通过示例演示了如何使用session对象的`setAttribute`和`getAttribute`方法在不同页面间传递和显示用户的用户名和密码信息,并说明了如何设置会话的有效期。
作用域通信对象:session用户在登录时通过`void setAttribute(String name,Object value)`方法设置用户名和密码。点击登录按钮后,跳转到另外一个页面显示用户
|
3月前
|
SQL 存储 数据库
|
3月前
【Azure Developer】使用PowerShell Where-Object方法过滤多维ArrayList时候,遇见的诡异问题 -- 当查找结果只有一个对象时,返回结果修改了对象结构,把多维变为一维
【Azure Developer】使用PowerShell Where-Object方法过滤多维ArrayList时候,遇见的诡异问题 -- 当查找结果只有一个对象时,返回结果修改了对象结构,把多维变为一维
网易:所有的对象最终都会继承自 Object.prototype ? ——原型链(二)详细讲解!
网易:所有的对象最终都会继承自 Object.prototype ? ——原型链(二)详细讲解!
|
6月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用合集之从MySQL同步数据到Doris时,历史数据时间字段显示为null,而增量数据部分的时间类型字段正常显示的原因是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
SQL 关系型数据库 MySQL
python在mysql中插入或者更新null空值
这段代码是Python操作MySQL数据库的示例。它执行SQL查询从表`a_kuakao_school`中选取`id`,`university_id`和`grade`,当`university_id`大于0时按升序排列。然后遍历结果,根据`row[4]`的值决定`grade`是否为`NULL`。若不为空,`grade`被格式化为字符串;否则,设为`NULL`。接着构造UPDATE语句更新`university`表中对应`id`的`grade`值,并提交事务。重要的是,字符串`NULL`不应加引号,否则更新会失败。
153 2
|
3月前
|
SQL 关系型数据库 MySQL
在 MySQL 中使用 IS NULL
【8月更文挑战第12天】
640 0
在 MySQL 中使用 IS NULL

热门文章

最新文章