重构手法64:Extract Interface (提炼接口)

若干客户使用类接口中的同一子集,或者2个类的接口部分相同。将相同的子集提炼到一个独立接口中。

动机:类之间彼此互用的方式有若干种。“使用一个类”通常意味着用到该类的所有责任区。另一种情况是,某一组客户只使用类责任区中的一个特定子集。再一种情况是,这个类需要与所有协助处理某些特定请求的类合作。

       对于后2种情况,将真正用到的这部分责任分离出来通常很有意义,因为这样可以使系统的用法更清晰,同时也更容易看清系统的责任划分。如果新的类需要支持上述子集,也比较能够看清子集内有些什么东西。

       在许多面向对象语言中,这种责任划分是通过多继承来实现的。在c#中可以运用接口来诏示并实现上述需求。

       Extract Subclass (提炼子类)和Extract Interface (提炼接口)之间有些相似之处。Extract Interface (提炼接口)只能提炼共通接口,不能提炼共通代码。使用Extract Interface (提炼接口)可能造成难闻的“重复”坏味道,幸而你可以运用Extract Class(提炼类)先把共通行为放进一个组件中,然后将工作委托给该组件,从而解决这个问题。如果有不少共通行为,Extract Superclass (提炼超类)会比较简单,但是每个类只能有一个超类。

       如果某个类在不同环境下扮演截然不同的角色,使用接口就是个好主意。你可以针对每个角色以Extract Interface (提炼接口)提炼出相应接口。另一种可以用Extract Interface (提炼接口)的情况是:你想要描述一个类的外部依赖接口。如果你打算将来加入其它种类的服务对象。只需要求它们实现这个接口即可。

 

转载于:https://www.cnblogs.com/matchcolor/archive/2010/08/12/1786279.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值