なんて天才だ!天才は勤勉の結果だと思います。-郭沫若
デザインパターンの学習、近い将来23のデザインパターンについてブログを書きますので、お楽しみに〜
—2021 / 1/11
定義
アピアランスモードは、プロセスモードとも呼ばれます。アピアランスモードは、オープンインターフェイスを定義することにより、サブクラス(特定のコード実装)の詳細を保護するために使用されます。これにより、呼び出し元はこのインターフェイスとの関係のみが必要になり、関係はなくなります。サブクラスの詳細に注意する必要があります(特定のコードの実装)。
使用するシーン
- 設計の初期段階では、異なるレイヤーを意識的に分離し、レイヤー間に外観モデルを確立する必要があります。
- 開発段階では、サブシステムはますます複雑になり、外観モードが追加されて、単純な呼び出しインターフェイスが提供されます。
外観モードは一般に「バッファレイヤー」と呼ばれます。
分析
UML类图(1.1)
:
UML类图(1.1)
対話するときに、クライアントは、各機能と対話する必要があることがわかります
それぞれの機能には一定のつながりがあります。たとえば、パソコンの電源を入れるとエアコンがオンになり、電話をかけるとテレビを見ることができます。
このように、相互作用は管理に役立つだけでなく、コード結合も特に高くなります
このとき、アピアランスモードが使用され、中央に「バッファレイヤー」のレイヤーが追加されます。
UML类图(1.2)
:唯一のバッファ層とクライアントの相互作用は、あなたがそれぞれのサブクラス(特定の実装コード)の詳細を気にする必要がない場合、これは外観モードであることがわかります
UML类图(1.2)
コード
エアコンエアコン
public class AirConditioner {
private static AirConditioner instance = new AirConditioner();
private AirConditioner(){
}
public static AirConditioner getInstance(){
return instance;
}
public void open(){
Log.i("外观模式","打开了空调");
}
public void close(){
Log.i("外观模式","关闭了空调");
}
}
電話携帯電話
public class Phone {
private static Phone instance = new Phone();
private Phone(){
}
public static Phone getInstance(){
return instance;
}
void open(){
Log.i("外观模式","打开了手机");
}
public void close(){
Log.i("外观模式","关闭了手机");
}
public void connectWiFi(){
Log.i("外观模式","手机 连接了WiFi");
}
}
コンピュータクラス
public class Computer {
private static Computer instance = new Computer();
private Computer(){
}
public static Computer getInstance(){
return instance;
}
public void open(){
Log.i("外观模式","打开了电脑");
}
public void close(){
Log.i("外观模式","关闭了电脑");
}
}
テレビ
public class Television {
private static Television instance = new Television();
private Television(){
}
public static Television getInstance(){
return instance;
}
void open(){
Log.i("外观模式","打开了电视");
}
void close(){
Log.i("外观模式","关闭了电视");
}
}
ファサードバッファーレイヤー:
public class Facade {
//空调
private final AirConditioner airConditioner;
//电脑
private final Computer computer;
//电视
private final Television television;
//手机
private final Phone phone;
//获取实例
public Facade() {
airConditioner = AirConditioner.getInstance();
computer = Computer.getInstance();
television = Television.getInstance();
phone = Phone.getInstance();
}
//打开 空调 电脑 电视 手机
public void open() {
airConditioner.open();
computer.open();
television.open();
phone.open();
}
//连接手机WIFI
public void connectWiFi() {
phone.connectWiFi();
}
public void close(){
airConditioner.close();
computer.close();
television.close();
phone.close();
}
}
テストコード:
Facade facade = new Facade();
打开 空调 电脑 电视 手机
facade.open();
Log.i("外观模式","=====================");
//连接手机WIFI
facade.connectWiFi();
Log.i("外观模式","=====================");
facade.close();
Log图(2.1)
:
利点:
- 外観モードは、サブシステムの詳細を外観から保護するため、クライアントによるサブシステムの使用の複雑さが軽減されます。
- 外観モデルを合理的に使用することで、階層をより適切に分割するのに役立ちます
- クライアントとサブシステム間の疎結合を実現する
注意:アピアランスモードを使用する目的でアピアランスモードを使用することはできません!単純なクラスが2つしかない場合は、アピアランスモードを直接使用する必要はなく、直接呼び出すだけで、アピアランスモードを使用してわずかに解決します。より複雑なサブクラス。メンテナンス目的を容易にするため
オリジナリティは簡単ではありません、あなたの好きなものは私にとってあなたの最大のサポートです、それらを好きになることを忘れないでください〜