接口行为的扩展,经常面临这样的问题,之前已经定义好一个接口,且该接口已经在很多地方使用到,现在我们想让新增新方法。
如下图1所示所示,已经定义了接口IVedioMedia,已经有RM和Mpeg实现了它。现在如果在IVedioMedia接口中新增resize()方法,那么就要连同RM和Mpeg一同修改,这已经违反了open-close原则,即在添加新功能的同时,不修改原有的、已经存在的代码。这时候我们应该定义新的interface接口——IResizable,之后新建RMAdapter来实现这个接口,同时让RMAdapter继承RM,这样就在实现新功能的同时,不修改IVediaoMedia和RM,做到了不修改已经存在的代码。
由于项目的历史原因,经常会遇到这种问题,所以在这里记录下。
图1
建议读者阅读《软件设计精要与模式》的第14章,阅读原文。
Reference:
- 张逸著,软件设计精要与模式,第14章
(adsbygoogle = window.adsbygoogle || []).push({});