前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >漫谈模式之空对象模式

漫谈模式之空对象模式

作者头像
孟君
发布2023-04-09 07:01:10
7950
发布2023-04-09 07:01:10
举报
文章被收录于专栏:孟君的编程札记

本文我们来介绍一下空对象模式(Null Object Pattern)

空对象模式(Null Object Pattern)是一种设计模式,用于处理对象不存在的情况,它通过返回一个空对象来代替 null 值,从而避免了空指针异常。空对象通常具有与正常对象相同的接口,但其方法体为空或返回默认值。

空对象模式的基本介绍

意图

它通过返回一个空对象来代替 null 值,从而避免了空指针异常。空对象通常具有与正常对象相同的接口,但其方法体为空或返回默认值。

结构

空对象模式的结构大致如下:

这里涉及到的参与者有如下几种:

AbstractObject(抽象类或接口)

定义了需要使用空对象模式的方法。

RealObject(具体类)

实现了抽象类或接口,并返回具体的对象或空对象。

NullObject(空对象类)

实现了抽象类或接口,表示一个不执行任何操作或返回任何值的对象。

Client(客户端)

使用具体类或空对象来执行方法。

空对象模式的示例

接下来,我们简单给出空对象使用示例。

示例、日志打印

定义一个抽象的日志类

具体日志类

空对象日志类

方便增加一个日志对象工厂

客户端Client

在Client中,我们先创建了一个Console日志,然后记录日志;接着,创建一个空对象日志,用于模拟空操作。

上述引入空对象的好处是:我们能够保证日志打印的一致性,在不一样的场景中,只要创建需要的日志打印对象即可。

输出结果

一般情况下,空对象类一般采用2种方式来处理:

  • 使用public static final 修饰,定义一个全局常量

如:

代码语言:javascript
复制
  public static final AbstarctLogger NOP_INSTANCE =                                       new NullLogger2();
  • 使用单例方式

如:

这样,一个简单的空对象示例就完成了。

其实,空对象还能在很多场景使用,比如,缓存对象。比如,有时候我们需要做相关的灰度切流,就需要灰度一部分流量调用新的接口。此时,我们也可以使用空对象。这样,我们针对未开启灰度的业务,缓存存储空对象,可以避免缓存击穿,也就是查缓存,未找到结果又查了数据库。可以结合工厂和策略,完成相关的操作。比如:空对象调用旧接口;如不是则调用新接口。

其它

优缺点

优点

  • 代码复用性高:通过使用空对象模式,可以在多个地方共享同一个空对象,避免了代码重复。
  • 程序可读性好:使用空对象模式可以使程序更加清晰易懂,因为我们可以将空对象的行为定义为默认行为,而不是在各种条件下进行特殊处理。
  • 更好的可扩展性:空对象模式能够支持新的对象类型,而不需要修改原有的代码。

缺点

  • 有可能降低程序的性能,因为需要多次进行对象比较,以判断是否为一个空对象。
  • 当应用程序需要高度定制的空对象时,空对象模式可能不够灵活。
  • 空对象模式可能需要对代码进行重构,以适应空对象的引入,增加了开发成本。

适用场景

Null Object pattern适用于以下情况:

  • 需要在某些地方使用默认行为,但是又不希望使用null来表示缺失的对象时。使用Null Object模式,可以使用默认对象来代替缺失的对象。
  • 需要减少代码中对null的检查和处理时。使用Null Object模式,可以避免对null的检查和处理,从而减少代码中的冗余。
  • 需要在运行时动态地替换对象时。使用Null Object模式,可以在运行时动态地替换对象,从而实现一些特殊的行为。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 空对象模式的基本介绍
  • 空对象模式的示例
  • 其它
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档