Facadeパターン
定義
統一されたインタフェース、グループ・サブシステムにアクセスするために使用されるインタフェースを提供します。皮革クライアントへのシステムの複雑さは、インターフェイスがシステムにアクセスすることができます提供する高レベルのインターフェイスの外観は、そのサブシステムに容易に使用すること。
構造
サブシステム*:サブシステムインタフェースは、データリソースにアクセスするために特定の順序でそれらの中に呼び出すことができます。
ファサード:このクラスは、共通の外部インターフェイスサブシステムの外観を提供します。
クライアント:クライアント・オブジェクト・インターフェースは、ルックを介して各インターフェイスサブシステムデータリソースを読み取るために。
アプリケーション
APIゲートウェイは、ITシステム境界統一入り口上の内部インターフェイスサービスへの外部アクセスを提供する企業です。
APIゲートウェイは、唯一の入口システムのサーバです。オブジェクト指向設計の観点から、それは外見モデルに似ています。マイクロサービスアーキテクチャでは、API Gatewayのエントリのすべてのサービスは、一般的にユーザーの認証と認可要求と転送経路が使用されています。
外観モードファサードのようなAPI Getwayは、各サービスは、サブシステムであります*。クライアントによって送信された要求によると、サービスにルーティング。
public interface Service {
void server();
}
public class ServiceA implements Service {
@Override
public void server() {
System.out.println("Request reached SERVICE-A!");
//...复杂的方法调用
}
}
public class ServiceB implements Service {
@Override
public void server() {
System.out.println("Request reached SERVICE-B!");
//...复杂的方法调用
}
}
public class ServiceC implements Service {
@Override
public void server() {
System.out.println("Request reached SERVICE-C!");
//...复杂的方法调用
}
}
public class APIGetway {
private Map<String, Service> services = new HashMap<>(8);
public void addService(String name, Service service) {
services.put(name, service);
}
public void forward(String request) throws IOException {
if (services.containsKey(request)) {
services.get(request).server();
} else {
throw new IOException("No Such Service!");
}
}
}
public class Client {
private APIGetway apiGetway;
public Client(APIGetway apiGetway) {
this.apiGetway = apiGetway;
}
public void sendRequest(String request){
try {
apiGetway.forward(request);
} catch (IOException e) {
e.printStackTrace();
}
}
}
テストカテゴリ:
public class Main {
public static void main(String[] args) {
APIGetway apiGetway = new APIGetway();
apiGetway.addService("SERVICE-A",new ServiceA());
apiGetway.addService("SERVICE-B",new ServiceB());
apiGetway.addService("SERVICE-C",new ServiceC());
Client client = new Client(apiGetway);
client.sendRequest("SERVICE-A");
client.sendRequest("SERVICE-B");
client.sendRequest("SERVICE-C");
}
}
Request reached SERVICE-A!
Request reached SERVICE-B!
Request reached SERVICE-B!
概要
パターンの外観を提供するために、統一されたインターフェイスを介していない場合、私は、実証されてきたように、実際のサブシステムインタフェースがシンプルとしてではない、その後、特定の特定のビジネスニーズが複雑になる可能性が終了しました。
ビジネスモデルの完成の外観を使用しないでください。
SubSystem1.mothod1();
SubSystem2.mothod2();
SubSystem3.mothod3();
SubSystem4.mothod4();
//...
使用スキンモード:
facade.service();
こうして完全なパターンの出現は、きめ細かい制御がサービスに発信者を露出しないように、ビジネスプロセスをパッケージ化することができます。
利点
-
サブシステムとクライアント間の疎結合関係を達成するために。
-
クライアント・サブシステムのシールドは組立、クライアントプロセスで必要とされるオブジェクトの数を減少させ、そして、そのようなサブシステムを使用する方が簡単。
短所
- モードは、特定のサービスの出現によって完成され、操作が特定のきめ細かいを達成することは困難です。
シナリオ
-
モジュールは、複雑なモジュールやサブシステムなどの外の世界へのアクセスを提供します。
-
クロマトグラフィーの構造、各層は、入口の外観のシステムモードを定義するために使用されてもよいです。