码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • (三)行为模式: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++实现空对象模式的实例

    1. #include
    2. // 抽象对象
    3. class AbstractObject {
    4. public:
    5. virtual void doSomething() = 0;
    6. };
    7. // 真实对象
    8. class RealObject : public AbstractObject {
    9. public:
    10. void doSomething() override {
    11. std::cout << "RealObject is doing something." << std::endl;
    12. }
    13. };
    14. // 空对象
    15. class NullObject : public AbstractObject {
    16. public:
    17. void doSomething() override {
    18. // 空对象不进行任何操作
    19. }
    20. };
    21. int main() {
    22. AbstractObject* obj1 = new RealObject();
    23. AbstractObject* obj2 = new NullObject();
    24. obj1->doSomething(); // 输出: RealObject is doing something.
    25. obj2->doSomething(); // 无输出
    26. delete obj1;
    27. delete obj2;
    28. return 0;
    29. }

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

  • 相关阅读:
    【Maven】高级应用
    Promise原理、以及Promise.race、Promise.all、Promise.resolve、Promise.reject实现;
    天线原理【1】 天线辐射的物理过程
    重新定义容器化 Serverless 应用的数据访问
    基本计算器 [括号匹配的变形]
    Appium 全新 2.0 全新跨平台生态,版本特性抢鲜体验!
    CentOs虚拟机下openGauss的配置使用
    python数据可视化-matplotlib入门(5)-饼图和堆叠图
    5-1继承的练习
    sqlserver 联表查询、子查询、窗口函数、聚合函数等概念与例子
  • 原文地址:https://blog.csdn.net/bigger_belief/article/details/132414223
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号