当前位置: 首页 > news >正文

(三)行为模式:9、空对象模式(Null Object Pattern)(C++示例)

目录

1、空对象模式(Null Object Pattern)含义

2、空对象模式的主要涉及以下几个角色

3、空对象模式的应用场景

4、空对象模式的优缺点

(1)优点

(2)缺点

5、C++实现空对象模式的实例


1、空对象模式(Null Object Pattern)含义

空对象模式(Null Object Pattern)是一种行为设计模式,它通过使用一个空对象来代替空值(null),从而避免在代码中频繁地检查空值的情况。

空对象模式的含义是:当需要使用一个对象时,如果该对象为空,就使用一个特定的空对象来代替,这个空对象具有与真实对象相同的接口,但是不进行任何实际操作。这样可以在不引发空指针异常的情况下继续执行代码。

2、空对象模式的主要涉及以下几个角色

(1)抽象对象(Abstract Object):定义了对象的通用接口,包括一些通用的方法。

(2)真实对象(Real Object):实现了抽象对象定义的接口,并提供了具体的功能。

(3)空对象(Null Object):实现了抽象对象定义的接口,但是不进行任何实际操作,即空对象没有具体的功能。

3、空对象模式的应用场景

(1)当需要处理空值的情况,并且希望避免频繁的空值检查时,可以考虑使用空对象模式。

(2)当需要提供默认行为或者占位符对象时,可以考虑使用空对象模式。

(3)当希望减少对真实对象的依赖,降低耦合度时,可以考虑使用空对象模式。

4、空对象模式的优缺点

(1)优点

        1)避免了对空值的频繁检查,简化了代码逻辑。

        2)提供了默认行为,使得代码更加健壮和可靠。

        3)可以减少对真实对象的依赖,降低了耦合度。

(2)缺点

        1)空对象可能会增加系统的复杂性,特别是在需要维护多个空对象时。

        2)空对象可能无法满足某些特定的需求,因为它没有具体的功能。

5、C++实现空对象模式的实例


#include <iostream>// 抽象对象
class AbstractObject {
public:virtual void doSomething() = 0;
};// 真实对象
class RealObject : public AbstractObject {
public:void doSomething() override {std::cout << "RealObject is doing something." << std::endl;}
};// 空对象
class NullObject : public AbstractObject {
public:void doSomething() override {// 空对象不进行任何操作}
};int main() {AbstractObject* obj1 = new RealObject();AbstractObject* obj2 = new NullObject();obj1->doSomething();  // 输出: RealObject is doing something.obj2->doSomething();  // 无输出delete obj1;delete obj2;return 0;
}

上述示例中,定义了一个抽象对象类AbstractObject,真实对象类RealObject和空对象类NullObject都继承自抽象对象类。在主函数中,创建了一个真实对象和一个空对象,并调用它们的doSomething()方法。真实对象会执行具体的操作,而空对象不进行任何操作。通过使用空对象,可以避免对空值的检查,使得代码更加简洁和健壮。

http://www.lryc.cn/news/184291.html

相关文章:

  • Django实战项目-学习任务系统-用户登录
  • 【动手学深度学习-Pytorch版】Transformer代码总结
  • 做外贸独立站选Shopify还是WordPress?
  • echarts的bug,在series里写tooltip,不起作用,要在全局先写tooltip:{}才起作用,如果在series里写的不起作用就写到全局里
  • jmeter分布式压测
  • consulmanage部署
  • 大数据软件项目的验收流程
  • 《第一行代码Andorid》阅读笔记-第一章
  • Educational Codeforces Round 146 (Rated for Div. 2)(VP)
  • 9.30国庆
  • java基础-第4章-面向对象(二)
  • flex加 grid 布局笔记
  • 最高评级!华为云CodeArts Board获信通院软件研发效能度量平台先进级认证
  • 图像上传功能实现
  • 03_Node.js模块化开发
  • Nginx支持SNI证书,已经ssl_server_name的使用
  • Hive【Hive(六)窗口函数】
  • Met no ‘TRANSLATIONS’ entry in project
  • Leetcode901-股票价格跨度
  • “传统文化宣传片+虚拟人动捕设备”前景如何?
  • 节假日moc服务数据:解决用户99%的IT问题
  • WOL唤醒配置(以太网、PHY、MAC)
  • MySQL复制,约束条件,查询与安全控制
  • Java ES 滚动查询
  • 机器学习算法基础--KNN算法分类
  • 深入探究 C++ 编程中的资源泄漏问题
  • BLE协议栈1-物理层PHY
  • 光伏储能直流系统MATLAB仿真(PV光伏阵列+Boost DCDC变换器+负载+双向DCDC变换器+锂离子电池系统)
  • C++三大特性——继承(上篇)
  • docker系列(9) - docker-compose