知识卡片
接口与实现分离到不同包
内容
把接口和实现放进不同的包很常见,常见形态是客户包定义接口、另一个包提供实现。典型场景:UI控件要和加热器、灯这类不同的东西协作,需要调用对方方法,却不希望依赖具体的加热器类——解法是在控件包里定义一个接口,由想接入的类自己实现该接口,把依赖方向反过来,控件包不再依赖具体实现包。这正是分离接口模式的体现,也是前面讲过的[[抽象类接口与供给需求关系|需要接口]]在包这个更大粒度上的应用。
参考来源
- 位置:《UML精粹:标准对象建模语言简明指南(第3版)》第7章《包图》(源文件:_epub-src/EPUB/6.xhtml)
- 结论依据:原文用UI控件与加热器的例子说明"我们不想让该控件依赖于Heater。我们可以在控件包中定义一个接口来避免这个依赖,然后这个接口由任何想要和这些控件一起工作的类实现……这是一个分离接口模式[Fowler,P of EAA]的例子"。
- 原始内容:想象一下我们要提供一些用户界面(UI)控件来打开和关闭某些东西……我们不想让该控件依赖于Heater。我们可以在控件包中定义一个接口来避免这个依赖,然后这个接口由任何想要和这些控件一起工作的类实现……这是一个分离接口模式[Fowler,P of EAA]的例子。