六大设计原则(3)接口隔离原则

引言:

接口的作用是 like -a关系,也即是是个啥---从属关系,也就是你走在大街上饿了,想吃饭了,也就是你想用哪个类的时候总不能到处找吧,这个时候肯德基的招牌就有用了,你至少知道他是个吃饭的地方,所以接口类似招牌,具体的动作在具体的类中实现,为何你不写项目的时候就搞个”字典“接口呢,一这个接口意义不明确,二就是因为java里面每个类实现了接口需要完全实现方法,所以你的类根本不会使用某些方法的时候会显得臃肿。

如图:

public interface interfaceAll {

	public void m1();
	
	public void m2();
	
	public void m3();
	
}

客户A:
public class ClientAClass {

	public void useA1(interfaceAll i){
		i.m1();
	}
	
	public void useA2(interfaceAll i){
		i.m2();
	}
}
给A客户的类:
public class AClass implements interfaceAll{

	@Override
	public void m1() {
		System.out.println("m1!");
	}

	@Override
	public void m2() {
		System.out.println("m2!");
	}

	@Override
	public void m3() {
		//no use!
	}

}
客户B:
public class ClientBClass {
	
	public void useA1(interfaceAll i){
		i.m1();
	}
	
	public void useA3(interfaceAll i){
		i.m3();
	}
}
给B客户的类:
public class BClass implements interfaceAll{

	@Override
	public void m1() {
		//no use!
	}

	@Override
	public void m2() {
		System.out.println("m2!");
	}

	@Override
	public void m3() {
		System.out.println("m3!");
	}

}

可见,在具体的实现类中有些方法根本用不到,非常不好看
需要改善:
public interface interface1 {
	public void m1();
}
public interface interface2 {
	public void m2();
}
public interface interface3 {
	public void m3();
}

public class BClass2 implements interface2,interface3{

	@Override
	public void m3() {
		System.out.println("m3!");
	}

	@Override
	public void m2() {
		System.out.println("m2!");
	}

}

public class AClass2 implements interface1,interface2{

	@Override
	public void m2() {
		System.out.println("m2!");
	}

	@Override
	public void m1() {
		System.out.println("m1!");
	}

}
这样实现类的招牌就非常明确了。

表现:

1,高内聚:也就是你使用一个类的打印一句话的方法,作为你来说你只用打印这个方法,在接口中这个方法的数据来源,判断等等有接口其他方法提供,并且是private,这个减少了对外的交互,客户更加简单,接口内的方法做一件事更明确。
2,接口大小适度:过小,导致实现类过多,过大,导致实现类臃肿。
3,专注服务:如果你发现你写的接口因为大了,让客户用到了不该用的方法,这个时候就要考虑把接口细分,客户要用的方法给他就好,不用的就藏起来。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值