网站默认首页怎么设置,建设局怎么进,在线制作wap网站,旅游景点网站建设现状模式定义
空对象模式#xff08;Null Object Pattern#xff09;是一种行为型设计模式#xff0c;通过用无操作的空对象替代null值#xff0c;消除客户端对空值的检查#xff0c;避免空指针异常。其核心是让空对象与真实对象实现相同接口#xff0c;但空对象不执行实际逻…模式定义
空对象模式Null Object Pattern是一种行为型设计模式通过用无操作的空对象替代null值消除客户端对空值的检查避免空指针异常。其核心是让空对象与真实对象实现相同接口但空对象不执行实际逻辑。 模式结构
抽象对象Abstract Object
定义所有对象的统一接口如Tool类中的use()方法。 真实对象Real Object实现具体功能如DrillTool钻孔操作。 空对象Null Object实现相同接口但无实际操作如NullTool静默处理调用。 适用场景
数控系统工具管理未安装工具时返回空工具对象。 避免空值检查如数据库查询未找到记录时返回空实体。 简化客户端逻辑无需判断对象是否为null。 C示例数控系统工具切换
场景说明 数控机床切换工具时若未安装工具则返回空对象避免空指针异常。
#include
#include // 抽象工具接口
class Tool {
public:virtual void use() 0;virtual ~Tool() default;
};// 真实对象钻孔工具
class DrillTool : public Tool {
public:void use() override {std::cout 钻孔工具启动开始钻孔操作\n;}
};// 真实对象切割工具
class CuttingTool : public Tool {
public:void use() override {std::cout 切割工具启动开始切割操作\n;}
};// 空对象未安装工具
class NullTool : public Tool {
public:void use() override {// 空操作不输出任何内容}
};// 工具工厂类
class ToolFactory {
public:static std::shared_ptr getTool(int toolId) {switch (toolId) {case 1: return std::make_shared();case 2: return std::make_shared();default: return std::make_shared(); // 无效ID返回空对象}}
};// 客户端代码数控系统操作
int main() {// 模拟工具切换假设当前未安装工具ID0auto tool ToolFactory::getTool(0);tool-use(); // 安全调用无空指针风险// 安装钻孔工具ID1tool ToolFactory::getTool(1);tool-use();return 0;
}代码解释 抽象接口Tool
定义use()方法强制所有工具实现统一操作。 真实工具类DrillTool和CuttingTool实现具体功能钻孔、切割。 空对象NullTool重写use()但不执行任何操作避免客户端因未安装工具而崩溃。 工厂类ToolFactory根据工具ID返回真实对象或空对象隐藏空值判断逻辑。 优势与引用来源
消除空检查客户端无需判断if (tool ! nullptr)。 增强健壮性空对象提供无害默认行为防止程序崩溃。 代码简洁性逻辑集中于工厂类客户端调用更简洁。