大话设计模式笔记之---接口隔离原则

接口隔离原则

接口尽量细化,同时接口中的方法尽量少

接口: 分为两种
1.实例接口(Object Interface)
Person zhangSan=new Person()
这个实例要遵从的标准就是Person这个类,Person类就是zhnagSan的接口(java中的类也是一种接口)
2.类接口(class Interface)
java中使用interface 关键字定义的接口
隔离:
1.Clients should not be forced to depend upon interfaces that they don’t use.(客户端不应该依赖它不需要的接口)
2.The dependency of one class to another one should depend on the smallest possible interface.(类间的依赖关系应该建立在最小的接口上)

例子:星探找美女
代码清单4-1 美女类
public interface IPettyGirl{
//要有较好的面孔
public void goodLooking();
//要有好身材
public void niceFigure();
//要有气质
public void greatTemperament();
}
代码清单4-2 美女实现类
public class PettyGirl implements IPettyGirl{
private String name;
//美女都有名字
public PettyGirl(String _name){
this.name=_name;
}
//脸蛋漂亮
public void goodLooking(){
System.out.Println(this.name+"—脸蛋很漂亮!");
//气质要好
public void greatTemperament(){
System.out.Println(this.name+"—气质非常好!");
}
//身材要好
public void niceFigure(){
System.out.Println(this.name+"—身材非常棒!");
}
}
代码清单4-3 星探抽象类
public abstract class AbstractSearcher{
protected IPettyGirl pettyGirl;
public AbstractSearcher(IPettyGirl _pettyGirl){
this.pettyGirl=_pettyGirl;
}
//搜索美女,列出美女信息
public abstract void show();
}
代码清单4-4 星探类
public class Searcher extends AbstractSearcher{

public Searcher(IPettyGirl _pettyGirl){
	super(_pettyGirl);
}
//展示美女的信息
public void show(){
	System.out.println("------美女的信息如下:--------");
	//展示面容
	super.pettyGirl.goodLooking();
	//展示身材
	super.pettyGirl.niceFigure();
	//展示气质
	super.pettyGirl.greatTemperament();
}

}

代码清单4-5 场景类
public class Client{
//搜索并展示美女信息
public static void main(String[] args){
//定义一个美女
IPettyGirl yanYan=new PettyGirl(“蘭”);
AbstractSearcher search=new Searcher(yanYan);
search.show();
}
}

代码清单4-6 两种类型的美女定义
public interface IGoodBodyGirl{
//要有较好的面孔
public void goodLooking();
//要有好身材
public void niceFigure();
}
public interface IGreatTemperamentGirl{
//要有气质
public void greatTemperament();
}

代码清单4-7 最标准的美女
public class PettyGirl implements IGoodBodyGirl,IGreatTemperajmentGirl{
private String name;
//美女都有名字
public PettyGirl(String _name){
this.name=_name;
}
//脸蛋漂亮
public void goodLooking(){
System.out.Println(this.name+"—脸蛋很漂亮!");
//气质要好
public void greatTemperament(){
System.out.Println(this.name+"—气质非常好!");
}
//身材要好
public void niceFigure(){
System.out.Println(this.name+"—身材非常棒!");
}
}

接口隔离原则是对接口进行规范约束,其包含4层含义:
1.接口要尽量小
根据接口隔离原则拆分接口时,首先必须满足单一职责原则
2.接口要高内聚
高内聚就是提高接口、类、模块的处理能力,减少对外的交互
3.定制服务
定制服务就是单独为一个个体提供优良的服务。要求:只提供访问者需要的方法。
4.接口设计是有限度的
接口的设计粒度越小,系统就越灵活。但灵活的同时带来结构的复杂化,开发难度增加,可维护性降低。所以接口设计一定要注意适度。

如何实践:
1.一个接口只服务于一个子模块或业务逻辑
2.通过业务逻辑压缩接口中的public方法,接口时常去回顾,尽量让接口达到"满身筋骨肉",而不是"肥嘟嘟"的一大堆方法
3.已经被污染了的接口,尽量去修改,若变更的分险较大,则采用适配器模式进行转化处理
4.了解环境,拒绝盲从

你可能感兴趣的:(设计模式)