设计模式——七大原则(接口隔离原则)

接口隔离原则

基本介绍

  1. Clients should not be forced to depend upon interfaces that they don’t use. (客户端不应该依赖它不需要的接口。)
  2. The dependency of one class to anotherone should depend on the smallest possible interface. (类间的依赖关系应该建立在最小的接口上。)
  3. 不要强迫客户使用它们不用的方法,如果强迫用户使用它们不使用的方法,那么这些客户就会面临由于这些不使用的方法的改变所带来的改变。

案例说明

package pers.lasting.principle.single;

/**
 * 
 * @author Lasting
 *
 * @version 2019年12月25日-上午9:19:02
 */

//定义一个接口,接口里面有行为方法
interface Behavior {
	public void eat(String animal);
	public void jump(String animal);
	public void fly(String animal);
	public void sleep(String animal);
}

class Dog implements Behavior{

	public void eat(String animal) {
		System.out.println(animal + "在吃...");
	}

	public void jump(String animal) {
		System.out.println(animal + "在跳...");
	}
	///
	//虽然狗不会飞,但是由于Behavior这个接口中有fly方法所以也必须实现
	public void fly(String animal) {
		System.out.println(animal + "在飞...");
	}

	public void sleep(String animal) {
		System.out.println(animal + "在睡觉...");
	}
	
}

class Dove implements Behavior{

	public void eat(String animal) {
		System.out.println(animal + "在吃...");
	}
	
	//鸽子不会跳,但是在Behavior这个接口中有这个方法,所以必须实现
	public void jump(String animal) {
		System.out.println(animal + "在跳...");
	}
	
	public void fly(String animal) {
		System.out.println(animal + "在飞...");
	}

	public void sleep(String animal) {
		System.out.println(animal + "在睡觉...");
		
	}
	
}

//综上所述,这种直接使用一个大的接口的方法确实是不太好
//可以根据单一职责原则,把这个接口分解成三个接口

/*
 * 修改方案如下
 * */

//跳是走兽的特性所以可以单独成为一个接口
interface Beast {
	public void jump(String animal);
}
//飞是飞禽的特性所以也可以单独成为一个接口
interface Bird{

	public void fly(String animal);
}

//睡觉和进食是所有动物都有的性质,所以放在一个接口中
interface Animal{
	public void sleep(String animal);
	public void eat(String animal);
}

//修改后的方案只需要声明所需要的接口就行了

class Crow implements Animal ,Bird {

	public void fly(String animal) {
		System.out.println(animal + "在飞...");
	}
	public void sleep(String animal) {
		System.out.println(animal + "在睡觉...");
	}
	public void eat(String animal) {
		System.out.println(animal + "在进食...");
	}
	
}
class Lion implements Animal ,Beast {
	public void sleep(String animal) {
		System.out.println(animal + "在睡觉...");
	}
	public void eat(String animal) {
		System.out.println(animal + "在进食...");
	}
	public void jump(String animal) {
		System.out.println(animal + "在跳...");
	}
	
}



public class InterfaceSegregation {
	
	public static void main(String[] args) {
		System.out.println("方案改进前:");
		Dog dog = new Dog();
		Dove dove = new Dove();
		dog.eat("狗");
		dog.fly("狗");
		dog.jump("狗");
		dog.sleep("狗");
		dove.eat("鸽子");
		dove.fly("鸽子");
		dove.jump("鸽子");
		dove.sleep("鸽子");
		
		System.out.println("\n方案改进后:");
		Crow crow = new Crow();
		Lion lion = new Lion();
		crow.eat("乌鸦");
		crow.fly("乌鸦");
		crow.sleep("乌鸦");
		lion.eat("狮子");
		lion.jump("狮子");
		lion.sleep("狮子");
	}
	
}

运行结果

运行结果

接口隔离原则注意事项和细节

  1. 接口尽量小,尽量遵循接口隔离原则,不要意图构建一个万能接口。
  2. 设计接口时,应根据实际情况分析,尽可能设计小的接口,为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。
  3. 提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值