天天看点

Java设计模式七大原则之接口隔离原则

Java设计模式七大原则之接口隔离原则

基本介绍

客户端不应该依赖在它不需要使用的接口,即一个类对另一个类的依赖应该建立在最小接口上

类图

Java设计模式七大原则之接口隔离原则

其中A类使用了接口中1,2,3这三种方法,C类使用了1,4,5这三种方法

未使用接口隔离原则应的代码

public class Segregation {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		A a=new A();
		a.depend1(new B());
		a.depend2(new B());
		a.depend3(new B());
		C c=new C();
		c.depend1(new D());
		c.depend4(new D());
		c.depend5(new D());
	}

}

interface Interface1 {
	void operation1();

	void operation2();

	void operation3();

	void operation4();

	void operation5();
}

class B implements Interface1 {
	public void operation1() {
		System.out.println("B中实现了操作1");
	}

	public void operation2() {
		System.out.println("B中实现了操作2");
	}

	public void operation3() {
		System.out.println("B中实现了操作3");
	}

	public void operation4() {
		System.out.println("B中实现了操作4");
	}

	public void operation5() {
		System.out.println("B中实现了操作5");
	}
}

class D implements Interface1 {
	public void operation1() {
		System.out.println("D中实现了操作1");
	}

	public void operation2() {
		System.out.println("D中实现了操作2");
	}

	public void operation3() {
		System.out.println("D中实现了操作3");
	}

	public void operation4() {
		System.out.println("D中实现了操作4");
	}

	public void operation5() {
		System.out.println("D中实现了操作5");
	}
}
class A {//A类通过接口Interface1依赖(使用)B类,但是会用到1,2,3,方法
	public void depend1(Interface1 i) {
		i.operation1();
	}
	public void depend2(Interface1 i) {
		i.operation2();
	}
	public void depend3(Interface1 i) {
		i.operation3();
	}
}
class C {//C类通过接口Interface1依赖(使用)D类,但是会用到1,4,5,方法
	public void depend1(Interface1 i) {
		i.operation1();
	}
	public void depend4(Interface1 i) {
		i.operation4();
	}
	public void depend5(Interface1 i) {
		i.operation5();
	}
           

根据类图写的代码小结:

A和C在通过接口依赖B和D时,A只使用了1,2,3方法,C只使用了1,4,5方法,只用一个接口会让类B,D去实现他们根本不需要使用的方法,所以需要将Interface1拆分为几个独立的接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。

使用接口隔离原则做的改进

public class Segregation1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		A a=new A();
		a.depend1(new B());//a 类通过接口去依赖B类
		a.depend2(new B());
		C b=new C();
		b.depend1(new D());
		b.depend2(new D());//c类通过接口去依赖D类
	}
	
}
 
interface Interface1 {
	void operation1();
}
interface Interface2{
	void operation2();
	void operation3();
}
interface Interface3{
	void operation4();
	void operation5();
}

class B implements Interface1,Interface2{
	public void operation1() {
		System.out.println("B 类实现了操作1");
	}
	public void operation2() {
		System.out.println("B 类实现了操作2");
	}
	public void operation3() {
		System.out.println("B 类实现了操作3");
	}
}
class D implements Interface1,Interface3{
	public void operation1() {
		System.out.println("D类实现了操作1");
	}
	public void operation4() {
		System.out.println("D类实现了操作4");
	}
	public void operation5() {
		System.out.println("D类实现了操作5");
	}
}
class A{
	public void depend1(Interface1 i) {
		i.operation1();
	}
	public void depend2(Interface2 i) {
		i.operation2();
		i.operation3();
	}
}
class C{
	public void depend1(Interface1 i) {
		i.operation1();
	}
	public void depend2(Interface3 a) {
		a.operation4();
		a.operation5();
	}
}