接口隔离原则

接口隔离原则
使用多个专门的接口比使用单一的总接口要好。
一个类对另外一个类的依赖性应当是建立在最小的接口上的。
一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。
“不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。”这个说得很明白了,再通俗点说,不要强迫客户使用它们不用的方法,如果强迫用户使用它们不使用的方法,那么这些客户就会面临由于这些不使用的方法的改变所带来的改变。
举例,现在有两个接口interfaceA和interfaceB,A中有方法A1、A2、A3、A4、A5。B中有方法B1、B2、B3,现在需要A中的方法A1、A2、A3和B中的方法B2。
A接口
public interface A {
	
	public void A1();
	public void A2();
	public void A3();
	public void A4();
	public void A5();

}
B接口
public interface B {
	
	public void B1();
	public void B2();
	public void B3();

}
C实现AB接口中的某些方法
public class C implements A, B {

	@Override
	public void B1() {
		// TODO Auto-generated method stub

	}

	@Override
	public void B2() {
		// TODO Auto-generated method stub
		System.out.println("实现C中B2方法");
	}

	@Override
	public void B3() {
		// TODO Auto-generated method stub

	}

	@Override
	public void A1() {
		// TODO Auto-generated method stub
		System.out.println("实现C中A1方法");
	}

	@Override
	public void A2() {
		// TODO Auto-generated method stub
		System.out.println("实现C中A2方法");
	}

	@Override
	public void A3() {
		// TODO Auto-generated method stub
		System.out.println("实现C中A3方法");
	}

	@Override
	public void A4() {
		// TODO Auto-generated method stub

	}

	@Override
	public void A5() {
		// TODO Auto-generated method stub

	}

}
测试实例
public class testdemo {
	
	public static void main(String arg[]){
		
		C c=new C();
		c.A1();
		c.A2();
		c.A3();
		c.B2();
		
		c.B1();
		
	}

}
结果
实现C中A1方法
实现C中A2方法
实现C中A3方法
实现C中B2方法
虽然C中只是需要A和B中的某几个方法,但是在C实现AB接口使必须连同A和B中某些不需要使用的方法一同实现,虽然方法里面可以是空方法,但是使程序过于庞大,封装的过度。这时候我们就可以把这些接口方法分开来就可以
分开的接口ABCD
public interface A {
	
	public void A1();
	public void A2();
	public void A3();
}
public interface B {
	
	public void A4();
	public void A5();

}
public interface C {
	
	public void B1();
	public void B3();

}
public interface D {
	
	public void B2();
}
E类实现需要的方法
public class E implements A, D {

	@Override
	public void B2() {
		// TODO Auto-generated method stub
		System.out.println("实现E中B2方法");
	}

	@Override
	public void A1() {
		// TODO Auto-generated method stub
		System.out.println("实现E中A1方法");
	}

	@Override
	public void A2() {
		// TODO Auto-generated method stub
		System.out.println("实现E中A2方法");
	}

	@Override
	public void A3() {
		// TODO Auto-generated method stub
		System.out.println("实现E中A3方法");
	}

}
测试实例
public class testdemo {
	
	public static void main(String arg[]){
		
		E c=new E();
		c.A1();
		c.A2();
		c.A3();
		c.B2();
		
	}

}
结果
实现E中A1方法
实现E中A2方法
实现E中A3方法
实现E中B2方法
接口隔离原则的含义是:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。也就是说,我们要为各个类建立专用的接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。本文例子中,将一个庞大的接口变更为2个专用的接口所采用的就是接口隔离原则。在程序设计中,依赖几个专用的接口要比依赖一个综合的接口更灵活。接口是设计时对外部设定的“契约”,通过分散定义多个接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。

         说到这里,很多人会觉的接口隔离原则跟之前的单一职责原则很相似,其实不然。其一,单一职责原则原注重的是职责;而接口隔离原则注重对接口依赖的隔离。其二,单一职责原则主要是约束类,其次才是接口和方法,它针对的是程序中的实现和细节;而接口隔离原则主要约束接口接口,主要针对抽象,针对程序整体框架的构建。

         采用接口隔离原则对接口进行约束时,要注意以下几点:

        1、接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性是不挣的事实,但是如果过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。

         2、为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。

        3、提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。

运用接口隔离原则,一定要适度,接口设计的过大或过小都不好。设计接口的时候,只有多花些时间去思考和筹划,才能准确地实践这一原则。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值