(三)行为模式: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()方法。真实对象会执行具体的操作,而空对象不进行任何操作。通过使用空对象,可以避免对空值的检查,使得代码更加简洁和健壮。
相关文章:
(三)行为模式:9、空对象模式(Null Object Pattern)(C++示例)
目录 1、空对象模式(Null Object Pattern)含义 2、空对象模式的主要涉及以下几个角色 3、空对象模式的应用场景 4、空对象模式的优缺点 (1)优点 (2)缺点 5、C实现空对象模式的实例 1、空对象模式&am…...
Django实战项目-学习任务系统-用户登录
第一步:先创建一个Django应用程序框架代码 1,先创建一个Django项目 django-admin startproject mysite将创建一个目录,其布局如下:mysite/manage.pymysite/__init__.pysettings.pyurls.pyasgi.pywsgi.py 2,再创建一个…...
【动手学深度学习-Pytorch版】Transformer代码总结
本文是纯纯的撸代码讲解,没有任何Transformer的基础内容~ 是从0榨干Transformer代码系列,借用的是李沐老师上课时讲解的代码。 本文是根据每个模块的实现过程来进行讲解的。如果您想获取关于Transformer具体的实现细节(不含代码)可…...
做外贸独立站选Shopify还是WordPress?
现在确实会有很多新人想做独立站,毕竟跨境电商平台内卷严重,平台规则限制不断升级,脱离平台“绑架”布局独立站,才能获得更多流量、订单、塑造品牌价值。然而,在选择建立外贸独立站的过程中,选择适合的建站…...
echarts的bug,在series里写tooltip,不起作用,要在全局先写tooltip:{}才起作用,如果在series里写的不起作用就写到全局里
echarts的bug,在series里写tooltip,不起作用,要在全局先写tooltip:{show:true}才起作用,如果在series里写的不起作用就写到全局里 series里写tooltip不起作用,鼠标悬浮在echarts图表上时不显示提示 你需要…...
jmeter分布式压测
一、什么是压力测试? 压力测试(Stress Test),也称为强度测试、负载测试,属于性能测试的范畴。 压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行被测软件系统ÿ…...
consulmanage部署
一、部署consul 使用yum方式部署consul yum install -y yum-utils yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo yum -y install consul 执行以下命令获取uuid密钥并记录下来 uuidgen 编辑consul配置文件 vi /etc/consul.d/consul.h…...
大数据软件项目的验收流程
大数据软件项目的验收流程是确保项目交付符合预期需求和质量标准的关键步骤。以下是一般的大数据软件项目验收流程,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.项目验收计划制定: 在…...
《第一行代码Andorid》阅读笔记-第一章
这篇文章是我自己的《第一行代码Andorid》的阅读笔记,虽然大量参考了别人已经写好的一些笔记和代码但是也有自己的提炼和新的问题在里面,我也会放上参考文章链接。 学习重点 Android系统的四大组件: (1)活动ÿ…...
Educational Codeforces Round 146 (Rated for Div. 2)(VP)
写个题解 A. Coins void solve(){ll n, k; cin >> n >> k;bl ok true;if (n &1 && k %2 0) ok false;print(ok ? yes : no); } B. Long Legs void solve(){db x, y; cin >> x >> y;if (x < y) swap(x, y);int t1 ceil(sqrt(x))…...
9.30国庆
消息队列完成进程间通信 #include <myhead.h>#define size sizeof(msg_ds)-sizeof(long) //正文大小//消息结构体 typedef struct {long msgtype; //消息类型char data[1024]; //消息正文 }msg_ds;//创建子线程构造体 void *task1(void *arg) {//创造第二个key值ke…...
java基础-第4章-面向对象(二)
一、static关键字 静态(static)可以修饰属性和方法。 称为静态属性(类属性)、静态方法(类方法)。 静态成员是全类所有对象共享的成员。 在全类中只有一份,不因创建多个对象而产生多份。 不必创…...
flex加 grid 布局笔记
<style> .flex-container { display: flex; height: 100%; /* 设置容器的高度 */ } .wide { display: flex; padding: 10px; border: 1px solid lightgray; text-align: center; justify-content: …...
最高评级!华为云CodeArts Board获信通院软件研发效能度量平台先进级认证
9月26日,华为云CodeArts Board获得了中国信通院《云上软件研发效能度量分级模型》的先进级最高级评估,达到了软件研发效能度量平台评估的通用效能度量能力、组织效能模型、项目效能模型、资源效能模型、个人效能模型、研发效能评价模型、项目管理域、开发…...
图像上传功能实现
一、后端 文件存放在images.path路径下 package com.like.common;import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annot…...
03_Node.js模块化开发
1 Node.js的基本使用 1.1 NPM nodejs安装完成后,会跟随着自动安装另外一个工具npm。 NPM的全称是Node Package Manager,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准。 2020年3月17日&…...
Nginx支持SNI证书,已经ssl_server_name的使用
整理了一些网上的资料,这里记录一下,供大家参考 什么是SNI? 传统的应用场景中,一台服务器对应一个IP地址,一个域名,使用一张包含了域名信息的证书。随着云计算技术的普及,在云中的虚拟机有了一…...
Hive【Hive(六)窗口函数】
窗口函数(window functions) 概述 定义 窗口函数能够为每行数据划分 一个窗口,然后对窗口范围内的数据进行计算,最后将计算结果返回给该行数据。 语法 窗口函数的语法主要包括 窗口 和 函数 两个部分。其中窗口用于定义计算范围…...
Met no ‘TRANSLATIONS’ entry in project
这里写自定义目录标题 问题描述:解决方法: 问题描述: 多工程项目,执行完update Translation生成了.ts文件,也用翻译工具翻译完了,执行release时,报错“Met no ‘TRANSLATIONS’ entry in proje…...
Leetcode901-股票价格跨度
一、前言 本题基于leetcode901股票价格趋势这道题,说一下通过java解决的一些方法。并且解释一下笔者写这道题之前的想法和一些自己遇到的错误。需要注意的是,该题最多调用 next 方法 10^4 次,一般出现该提示说明需要注意时间复杂度。 二、解决思路 ①…...
横空出世!IDEA最强MyBatis插件来了,功能很全!
最近更新了IDEA 2026.1这个版本,发现之前使用的MyBaitsX这个插件没有兼容,启动就报错!于是就改用了MyBatisCodeHelper-Pro这个插件,体验了一把,提示很全,还有方便的MyBaits日志转SQL面板,这里分…...
LLM与图数据库融合:自然语言驱动知识图谱查询实战
1. 项目概述:当LLM遇见图数据库,知识推理的新范式最近在探索如何让大语言模型(LLM)更好地处理复杂、结构化的知识时,我遇到了一个非常有意思的项目:dylanhogg/llmgraph。这个项目本质上是一个桥梁ÿ…...
2026年主流地图API AI功能开发与零代码工具横评
核心观点摘要 行业趋势判断:AI与零代码正深度融合地图API开发,推动位置智能从专业编码向业务自助快速演进,2026年主流平台将在多模态数据融合与行业化场景能力上形成分水岭。选型关键维度:需综合考量数据覆盖广度、模型智能水平、…...
Redis_7_Streams与高可用集群实战
Redis 7.0 Streams与高可用集群部署实战 从消息队列到分布式架构,全面掌握Redis核心能力 前言 Redis不只是一个缓存数据库。Redis 5.0引入的Streams让它具备了消息队列的能力,Redis 7.0进一步增强了Streams的稳定性和性能。很多团队在用Kafka/RabbitMQ处理消息队列时,其实R…...
Kotlin多平台集成OpenAI API:类型安全与协程流式处理实践
1. 项目概述:当Kotlin遇见OpenAI如果你是一名Android或Kotlin多平台(KMP)开发者,最近想在自己的应用中集成AI对话、图像生成或者语音转文本这类酷炫功能,那么你大概率绕不开OpenAI的API。但当你兴冲冲地打开官方文档&a…...
Swift 项目集成 MJRefresh 终极指南:SPM包管理与桥接文件配置详解
Swift 项目集成 MJRefresh 终极指南:SPM包管理与桥接文件配置详解 【免费下载链接】MJRefresh An easy way to use pull-to-refresh. 项目地址: https://gitcode.com/gh_mirrors/mj/MJRefresh MJRefresh 是一款简单易用的下拉刷新框架,能帮助 Swi…...
开源状态监控工具openclaw-status:从原理到部署的完整实践指南
1. 项目概述:一个开源状态监控工具的诞生最近在折腾一个开源项目,叫openclaw-status,是vibe-with-me-tools组织下的一个子项目。简单来说,这是一个用于监控和展示各种服务、应用、设备状态的工具。听起来是不是有点像那些商业化的…...
用ChatGPT批量生成高互动Instagram内容:5步工作流+4类避坑红线(数据实测CTR提升217%)
更多请点击: https://intelliparadigm.com 第一章:用ChatGPT批量生成高互动Instagram内容:5步工作流4类避坑红线(数据实测CTR提升217%) 借助ChatGPT API 与 Instagram Graph API 的协同调度,可构建轻量级自…...
VSCode毛玻璃效果实现:CSS backdrop-filter原理与性能调优指南
1. 项目概述:当代码编辑器遇上毛玻璃美学如果你和我一样,每天有超过8小时的时间是在Visual Studio Code(以下简称VSCode)中度过的,那么你肯定不止一次地折腾过它的主题和外观。从默认的深色主题到各种炫酷的Material D…...
Arm Forge工具在高性能计算中的性能分析与优化实践
1. Arm Forge性能分析工具概述高性能计算(HPC)领域的开发者们经常面临一个共同挑战:如何从复杂的并行程序中榨取出最后一点性能潜力。Arm Forge作为一套专业的性能分析工具链,为这个难题提供了系统化的解决方案。我在多个超算中心的实际调优工作中发现&a…...
