25、设计模式:空对象与模板方法模式解析

设计模式:空对象与模板方法模式解析

1. 空对象模式

1.1 空对象模式描述

在大多数计算机编程语言中,“null” 用于表示不存在的对象。当客户端期望使用类层次结构中的不同子类来执行不同行为,并将这些子类作为父类类型的对象引用时,有时可能在客户端需要子类实例时,该实例不可用,此时客户端接收到的就是不存在的对象或 “null”。当返回 “null” 时,客户端无法像返回真实对象那样调用方法,因此在调用对象的任何方法之前,客户端需要检查该对象是否为 “null”。在遇到 “null” 的情况下,客户端要么提供一些默认行为,要么不做任何操作。

空对象模式建议将默认(通常是不做任何操作)行为封装到一个单独的类中,这个类被称为空对象类。该类可以设计为类层次结构中的一个子类。空对象类提供与其他子类相同的方法集,但对其方法采用默认(或不做任何操作)的实现。有了空对象,当没有具有实际实现的子类可用时,空对象会提供给客户端。这种安排消除了客户端收到不存在对象的可能性,因此客户端无需检查接收到的对象是否为 “null”(或不存在)。由于空对象提供了与其他子类对象相同的接口,客户端可以统一处理它们。

1.2 消息日志记录工具示例

1.2.1 原始设计

消息日志记录工具的设计主要由 Logger 接口及其两个实现类 FileLogger ConsoleLogger 组成,分别用于将消息记录到文件和控制台。此外,还有 LoggerFactory 类(清单 37.1),其中包含一个工厂方法。当客户端请求时,工厂方

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值