经典定时门案例中Class Adapter模式的角色解析
类适配器模式在定时安全门案例中的角色澄清
在Uncle Bob的ISP教程定时安全门案例里,类适配器模式的核心是通过多重继承衔接TimerClient和Door两个层级,我们可以严格对应GoF的类适配器角色定义来澄清:
核心角色对应
- 适配接口(目标接口):
TimerClient
这是系统期望的接口规范——Timer组件只能调用实现了TimerClient接口的对象,我们的目标就是让Door相关类能被Timer驱动,所以TimerClient是适配的目标。 - 被适配者:
Door(抽象类或具体Door实现类)
这是已有业务组件,它的接口(比如lock()、unlock())不符合TimerClient的要求(需要实现timeOut()方法),是需要被适配的对象。 - 适配器:
TimedDoor
它同时继承TimerClient(目标接口)和Door(被适配者),在TimedDoor中实现TimerClient要求的timeOut()方法,内部调用Door的lock()方法完成业务逻辑,从而把Door的接口转换为TimerClient能识别的格式。
对两种理解的澄清
- 第一种理解是正确的:完全符合类适配器“多重继承目标接口+被适配者类,适配器承担转换逻辑”的核心设计,
TimedDoor作为适配器,衔接了两个原本不兼容的层级。 - 第二种理解错误:
TimedDoor并非兼具适配器与被适配者角色。类适配器的被适配者是原本就存在的、接口不匹配的业务组件(也就是Door),而TimedDoor是专门为适配创建的中间类,它的职责是转换接口,而非作为被适配的对象——这种混淆可能是把类适配器和对象适配器的逻辑搞混了,对象适配器是通过组合被适配者实现,而类适配器的核心是多重继承。
内容的提问来源于stack exchange,提问作者Shaharg
相关产品推荐
相关产品推荐

