类间的依赖关系应该建立在最小的接口上
反例:
UML图
代码:
interface Interface1 {
void operation1();
void operation2();
void operation3();
void operation4();
void operation5();
}
class B implements Interface1 {
@Override
public void operation1() {
System.out.println("B实现了operation1");
}
@Override
public void operation2() {
System.out.println("B实现了operation2");
}
@Override
public void operation3() {
System.out.println("B实现了operation3");
}
@Override
public void operation4() {
System.out.println("B实现了operation4");
}
@Override
public void operation5() {
System.out.println("B实现了operation5");
}
}
class D implements Interface1 {
@Override
public void operation1() {
System.out.println("D实现了operation1");
}
@Override
public void operation2() {
System.out.println("D实现了operation2");
}
@Override
public void operation3() {
System.out.println("D实现了operation3");
}
@Override
public void operation4() {
System.out.println("D实现了operation4");
}
@Override
public void operation5() {
System.out.println("D实现了operation5");
}
}
/**
* A类通过j接口Interface1依赖(使用)B类,但只会用到1,2,3方法
*/
class A {
public void dependency1(Interface1 i) {
i.operation1();
}
public void dependency2(Interface1 i) {
i.operation2();
}
public void dependency3(Interface1 i) {
i.operation3();
}
}
/**
* C类通过j接口Interface1依赖(使用)D类,但只会用到1,4,5方法
*/
class C {
public void dependency1(Interface1 i) {
i.operation1();
}
public void dependency4(Interface1 i) {
i.operation4();
}
public void dependency5(Interface1 i) {
i.operation5();
}
}
优化
UML
代码
interface Interface1 {
void operation1();
}
interface Interface2 {
void operation2();
void operation3();
}
interface Interface3 {
void operation4();
void operation5();
}
class B implements Interface1,Interface2 {
@Override
public void operation1() {
System.out.println("B实现了operation1");
}
@Override
public void operation2() {
System.out.println("B实现了operation2");
}
@Override
public void operation3() {
System.out.println("B实现了operation3");
}
}
class D implements Interface1,Interface3 {
@Override
public void operation1() {
System.out.println("D实现了operation1");
}
@Override
public void operation4() {
System.out.println("D实现了operation4");
}
@Override
public void operation5() {
System.out.println("D实现了operation5");
}
}
/**
* A类通过j接口Interface1,Interface2依赖(使用)B类,但只会用到1,2,3方法
*/
class A {
public void dependency1(Interface1 i) {
i.operation1();
}
public void dependency2(Interface2 i) {
i.operation2();
}
public void dependency3(Interface2 i) {
i.operation3();
}
}
/**
* C类通过j接口Interface1,Interface3依赖(使用)D类,但只会用到1,4,5方法
*/
class C {
public void dependency1(Interface1 i) {
i.operation1();
}
public void dependency4(Interface3 i) {
i.operation4();
}
public void dependency5(Interface3 i) {
i.operation5();
}
}