首页 > 代码库 > 设计模式之禅-接口隔离原则

设计模式之禅-接口隔离原则

个人blog 此篇博文地址:http://www.sanyinchenblog.com/?p=174
接口隔离原则:
demo: https://github.com/sanyinchen/UMLDemo 接口的两种类型: (1)实例接口 (2)类接口,使用Interface定义的接口 隔离: (1)客户端不应该依赖它不需要的接口 (2)类间的依赖关系应该建立在最小的接口上 场景描述:你一日在大街上闲着无聊,在大街上喊了一句美女,结果好多女生都回过头注视你。 我们现在给美女下一个定义: (1)好看的容貌 (2)好的身材 (3)好的气质 但是现在问题来了,只有全部符合这三条的才是美女吗,比如一个女生有很好的气质,但是相貌长相一般,但是她仍然是一个美女,我们把她称之为气: 
public class Client {

public static void main(String[] args) {

// TODO Auto-generated method stub

IGoodBodyGril bodyGril = new IGoodBodyGril() {

@Override

public void niceFigure() {

// TODO Auto-generated method stub

System.out.println("好的身材!");

}

@Override

public void goodLooking() {

// TODO Auto-generated method stub

System.out.println("好的容貌!");

}

};

IGreatTemperamentGril greatTemperamentGril = new IGreatTemperamentGril() {

@Override

public void greatTemperament() {

// TODO Auto-generated method stub

System.out.println("好的气质!");

}

};

Search search = new Search(greatTemperamentGril);

search.show();

Search2 search2 = new Search2(bodyGril);

search2.show();

}

}

以上就是把一个臃肿的接口拆分成两个,让AbstractSearch有两个更为针对性的接口(这一点看起来有点像单一职责,但是范围感觉要比单一职责大的多)。 接口隔离原则的约束规范: (1)接口要尽量小(依据接口隔离原则拆分接口首先必须满足单一职责原则) (2)接口要高内聚(书中解释什么是高内聚举了个很有意思的例子:有一天你告诉你的下属去把奥巴马桌子上XXX文件拿过来,过了几个月,你下属还真把这份文件给你拿过来了。这种不讲任何条件立即执行完成任务的表现就是高内聚的表现。具体到隔离原则就是要求在接口中尽量少的公布public方法,换句话说就是尽量减少接口的数量,好吧,又回到了第一条) (3)定制服务(只提供访问者需要的方法) (4)接口的设计是有限度的(接口设计的越小,那么系统就越灵活,但相应的来说,系统就变的复杂,所以这个限度要依据项目而定) 接口隔离设计原则: (1)一个接口只服务于一个子模块或者业务逻辑 (2)通过业务逻辑去压缩接口中的public方法 (3)已经被污染的接口尽量去修改,若变更风险大则使用适配器模式进行转化 (4)了解环境,拒绝盲从

设计模式之禅-接口隔离原则