接口隔离原则(ISP)

  • ISP用来处理fat接口的缺点.
    1. 如果类的接口不是内聚的,那么该类就具有fat接口.
    2. fat接口可以分解为多个组.每个组服务于不同的客户.
    3. ISP承认不需要内聚接口的对象.但是建议客户不应该看到它作为单一的类而存在.
    4. 客户程序看到的应该是多个具有内聚接口的抽象基类.
  • 接口污染.
  • 分离客户就是分离接口.
    1. 客户对接口施加的反作用力.
    2. 考虑引起变化的作用力时,通常考虑的是接口的变化会怎么影响它的使用者.
    3. 但有时候,迫使接口改变的,正是它的使用者.
  • ISP:不应该强迫客户依赖于它们不使用的方法.
    • 这样会导致所有客户程序间的耦合.
    • 一个客户依赖于一个它不使用的方法的类.但是其他客户却要使用该方法.
    • 此时,当其它客户要求这个类改变时,会影响到第一个客户.这样加剧了更改的附加风险.
  • 类接口与对象接口.
    • 一个对象的客户不是必须通过该对象的接口去访问它,也可以通过委托或者该对象的基类来访问它.
    • 多参数与单参数形式.
      • void g(DepositUI,TransferUI);/void g(UI);
      • 首先,因为两个参数引用的是同一个对象,加上多参数的调用形式为g(ui,ui).直觉上可能倾向于单参数.
      • 但是,单参数迫使g函数依赖于UI实现的所有的接口.譬如当与g函数无关的withdrawUI接口变化时,g函数和其所有客户都需要联动更新.
    • 对客户进行分组
      • 可以根据客户所调用的服务方法来对客户进行分组,这样可以为每组而不是每个客户创建分离的接口.
      • 这样,减少了服务需要实现的接口数量;也避免了让服务依赖于每个客户类型.
      • 有时,不同客户组调用的方法会有重叠,如果重叠较少,那么组的接口应该保持分离.公共方法应该在所有重叠的接口中声明,同时服务者类继承了所有的公共方法,但是只会实现它们一次.
    • 改变接口
      • 维护时,会改变现有的类和组件的接口.造成了系统的大部分需要重新编译和部署.
      • 可以通过为现有的对象增加新的接口来缓解,而不是去改变现有的接口.
      • 原有接口的客户访问新接口的方法时,可以通过is来查询该新接口.
      • 不能过度使用,当一个类实现了过多的接口.而这些接口的分类方式还不同(根据版本,根据客户程序).此类是难以维护的.

总结. fat类导致它的客户程序之间参数了有害的耦合关系.

当一个客户要求胖类改动时,会影响到其他的客户.

客户应该仅仅依赖它们实际需要调用的方法.

通过将胖类的接口分解为多个特定于客户的接口来解决.

 

[Agile Software Development(Principles,Patterns,and Pracitices)]

转载于:https://www.cnblogs.com/robyn/p/3461271.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值