在状态设计模式中遵循接口隔离原则:拆分接口是否符合模式要求?
状态设计模式相关疑问解答
问题1:多方法IState接口仅部分实现是否违反接口隔离原则?
是的,这种做法明确违反了接口隔离原则(ISP)。接口隔离原则的核心是:客户端不应该依赖它不需要的接口方法,接口应当是高内聚、最小化的。
当你定义一个包含大量方法的IState接口,而大部分状态类只需要实现其中少数方法,其余方法只能返回“无法在当前状态执行”的提示时,这些状态类被迫依赖了自己根本用不到的方法,既增加了代码冗余,也提高了后续维护的成本——比如修改接口方法时,所有实现类都要跟着调整,哪怕它们根本不使用这个方法。
问题2:拆分多方法接口为小接口是否符合状态设计模式要求?
完全符合,甚至是对状态模式的优化实现。
状态设计模式的核心是:允许对象在内部状态改变时,动态改变其行为。拆分后的小接口(如IChargePort、ITrunk)专注于单一功能领域,状态类可以根据自身的能力按需实现对应的接口。Context类可以根据当前状态的类型(判断是否实现了某个小接口)来调用对应的方法,既避免了无效的方法调用,也让状态类的职责更清晰。
原IState接口:
interface IState { void OpenChargePort(); void CloseChargePort(); void PlayMusic(); void StopMusic(); void OpenWindow(); void CloseWindow(); void OpenTrunk(); void CloseTrunk(); }
拆分后的部分接口:
interface IChargePort { void OpenChargePort(); void CloseChargePort(); }
interface ITrunk { void OpenTrunk(); void CloseTrunk(); }
内容的提问来源于stack exchange,提问作者Angel Hadzhiev
相关产品推荐
相关产品推荐

