アピアランスモード:
サブシステム内のインターフェイスのグループに一貫したインターフェイスを提供します。このモードは、このサブシステムを使いやすくするための高レベルのインターフェイスを定義します。
依存性逆転の原則:抽象化は詳細に依存するべきではなく、詳細は抽象化に依存する必要があります。インターフェイスプログラミングの場合、実装をプログラムしないでください。
A.高レベルのモジュールは低レベルのモジュールに依存するべきではありません。どちらも抽象化に依存する必要があります。
B.抽象化は詳細に依存するべきではなく、詳細は抽象化に依存するべきです。
ディミットのルール:
2つのクラスが相互に通信する必要がない場合、2つのクラスは直接の相互作用を送信するべきではありません。クラスの1つが別のクラスのメソッドを呼び出す必要がある場合、その呼び出しはサードパーティを介して転送できます。
外観モデルは、逆転の原則とディミットの法則に依存するという考えを完全に具体化しています。
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