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();
}
}