本文我们来介绍一下空对象模式(Null Object Pattern)
空对象模式(Null Object Pattern)是一种设计模式,用于处理对象不存在的情况,它通过返回一个空对象来代替 null 值,从而避免了空指针异常。空对象通常具有与正常对象相同的接口,但其方法体为空或返回默认值。
意图
它通过返回一个空对象来代替 null 值,从而避免了空指针异常。空对象通常具有与正常对象相同的接口,但其方法体为空或返回默认值。
结构
空对象模式的结构大致如下:
这里涉及到的参与者有如下几种:
AbstractObject(抽象类或接口)
定义了需要使用空对象模式的方法。
RealObject(具体类)
实现了抽象类或接口,并返回具体的对象或空对象。
NullObject(空对象类)
实现了抽象类或接口,表示一个不执行任何操作或返回任何值的对象。
Client(客户端)
使用具体类或空对象来执行方法。
接下来,我们简单给出空对象使用示例。
示例、日志打印
定义一个抽象的日志类
具体日志类
空对象日志类
方便增加一个日志对象工厂
客户端Client
在Client中,我们先创建了一个Console日志,然后记录日志;接着,创建一个空对象日志,用于模拟空操作。
上述引入空对象的好处是:我们能够保证日志打印的一致性,在不一样的场景中,只要创建需要的日志打印对象即可。
输出结果
一般情况下,空对象类一般采用2种方式来处理:
如:
public static final AbstarctLogger NOP_INSTANCE = new NullLogger2();
如:
这样,一个简单的空对象示例就完成了。
其实,空对象还能在很多场景使用,比如,缓存对象。比如,有时候我们需要做相关的灰度切流,就需要灰度一部分流量调用新的接口。此时,我们也可以使用空对象。这样,我们针对未开启灰度的业务,缓存存储空对象,可以避免缓存击穿,也就是查缓存,未找到结果又查了数据库。可以结合工厂和策略,完成相关的操作。比如:空对象调用旧接口;如不是则调用新接口。
优缺点
优点
缺点
适用场景
Null Object pattern适用于以下情况:
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。