漫谈模式之空对象模式
本文我们来介绍一下空对象模式(Null Object Pattern)
空对象模式(Null Object Pattern)是一种设计模式,用于处理对象不存在的情况,它通过返回一个空对象来代替 null 值,从而避免了空指针异常。空对象通常具有与正常对象相同的接口,但其方法体为空或返回默认值。
空对象模式的基本介绍
意图
它通过返回一个空对象来代替 null 值,从而避免了空指针异常。空对象通常具有与正常对象相同的接口,但其方法体为空或返回默认值。
结构
空对象模式的结构大致如下:
这里涉及到的参与者有如下几种:
AbstractObject(抽象类或接口)
定义了需要使用空对象模式的方法。
RealObject(具体类)
实现了抽象类或接口,并返回具体的对象或空对象。
NullObject(空对象类)
实现了抽象类或接口,表示一个不执行任何操作或返回任何值的对象。
Client(客户端)
使用具体类或空对象来执行方法。
空对象模式的示例
接下来,我们简单给出空对象使用示例。
示例、日志打印
定义一个抽象的日志类
具体日志类
空对象日志类
方便增加一个日志对象工厂
客户端Client
在Client中,我们先创建了一个Console日志,然后记录日志;接着,创建一个空对象日志,用于模拟空操作。
上述引入空对象的好处是:我们能够保证日志打印的一致性,在不一样的场景中,只要创建需要的日志打印对象即可。
输出结果
一般情况下,空对象类一般采用2种方式来处理:
- 使用public static final 修饰,定义一个全局常量
如:
public static final AbstarctLogger NOP_INSTANCE = new NullLogger2();
- 使用单例方式
如:
这样,一个简单的空对象示例就完成了。
其实,空对象还能在很多场景使用,比如,缓存对象。比如,有时候我们需要做相关的灰度切流,就需要灰度一部分流量调用新的接口。此时,我们也可以使用空对象。这样,我们针对未开启灰度的业务,缓存存储空对象,可以避免缓存击穿,也就是查缓存,未找到结果又查了数据库。可以结合工厂和策略,完成相关的操作。比如:空对象调用旧接口;如不是则调用新接口。
其它
优缺点
优点
- 代码复用性高:通过使用空对象模式,可以在多个地方共享同一个空对象,避免了代码重复。
- 程序可读性好:使用空对象模式可以使程序更加清晰易懂,因为我们可以将空对象的行为定义为默认行为,而不是在各种条件下进行特殊处理。
- 更好的可扩展性:空对象模式能够支持新的对象类型,而不需要修改原有的代码。
缺点
- 有可能降低程序的性能,因为需要多次进行对象比较,以判断是否为一个空对象。
- 当应用程序需要高度定制的空对象时,空对象模式可能不够灵活。
- 空对象模式可能需要对代码进行重构,以适应空对象的引入,增加了开发成本。
适用场景
Null Object pattern适用于以下情况:
- 需要在某些地方使用默认行为,但是又不希望使用null来表示缺失的对象时。使用Null Object模式,可以使用默认对象来代替缺失的对象。
- 需要减少代码中对null的检查和处理时。使用Null Object模式,可以避免对null的检查和处理,从而减少代码中的冗余。
- 需要在运行时动态地替换对象时。使用Null Object模式,可以在运行时动态地替换对象,从而实现一些特殊的行为。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 漫谈模式之空对象模式
本文地址: https://pptw.com/jishu/3350.html