外观模式:
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
依赖倒转原则:抽象不应该依赖细节,细节应该依赖于抽象。针对接口编程,不要对实现编程。
A.高层模块不应该依赖底层模块,两个都应该依赖抽象。
B.抽象不应该依赖细节,细节应该依赖抽象。
迪米特法则:
如果两个类之间不必彼此通信,那么这两个类就不应该发送直接的相互作用。如果其中一个类需要调用另一个类的某一个方法,可以通过第三者转发这个调用。
外观模式完美地体现了依赖倒转原则和迪米特法则的思想。
public class SystemOne {
public void methodOne() {
System.out.println("子系统方法1");
}
}
public class SystemTwo {
public void methodTwo(){
System.out.println("子系统方法2");
}
}
public class SystemThree {
public void methodThree() {
System.out.println("子系统方法3");
}
}
//外观类,它需要了解所有子系统的方法或属性,进行组合,以备外界调用
public class Facade {
private SystemOne systemOne;
private SystemTwo systemTwo;
private SystemThree systemThree;
public Facade() {
systemOne = new SystemOne();
systemTwo = new SystemTwo();
systemThree = new SystemThree();
}
public void MethodA() {
System.out.println("方法组A");
systemOne.methodOne();
systemTwo.methodTwo();
}
public void MethodB() {
System.out.println("方法组B");
systemOne.methodOne();
systemThree.methodThree();
}
public void MethodC() {
System.out.println("方法组C");
systemOne.methodOne();
systemTwo.methodTwo();
systemThree.methodThree();
}
public static void main(String[] args) {
Facade facade = new Facade();
facade.MethodA();
facade.MethodB();
facade.MethodC();
}
}
输出:
方法组A
子系统方法1
子系统方法2
方法组B
子系统方法1
子系统方法3
方法组C
子系统方法1
子系统方法2
子系统方法3