ファサード-デザインパターン
アピアランスモードとは何ですか?
私たちの間でよくあることですが、win10コンピュータシステムをインストールする必要がある場合、インストールシステムのすべての部分を理解する必要はなく、インストールのために固定プログラムに渡すだけです。病院に行くときは医師の診察を受けて、登録や外来診療に行くこともありますが、患者さんやそのご家族が薬の値段をつけてもらうのはとても大変です。受付があれば、受付だけに任せるととても便利です。 …
外観モードは、イベントの特定の詳細をカプセル化することで、ユーザーが要件をより便利に完了することができるようにします。
つまり、一貫性のあるインターフェイス(インターフェイスクラス)を定義することにより、内部サブシステムの詳細がシールドされるため、呼び出し側はこのインターフェイスで呼び出しを行うだけでよく、サブシステムの内部の詳細を気にする必要はありません。
外観モードの基本的な紹介
劇場経営者を作る?
今、劇場運営プロジェクトを作りたいと思ったら、ホームシアターを使うという機能を完成させる必要があるとしたら、これらの方法を一つ一つ呼んで使うのは面倒で、構造も混沌としている。
通常の状況では、シネマは映画の再生、再生の開始、再生の一時停止、および再生の終了作業の準備のみを提供します。このとき、アピアランスモードを使用してこの効果を実現できます。
実装コード
ポップコーン
package com.design_patterns.facade;
/**
* 定义爆米花机器类
*/
public class PopCorn {
private static PopCorn instance = new PopCorn();
private PopCorn(){
};
public static PopCorn getInstance(){
return instance;
}
public void on(){
System.out.println(" popcorn on ");
}
public void off(){
System.out.println(" popcorn off ");
}
public void pop(){
System.out.println(" popcorn pop ");
}
}
DVDプレーヤークラス
package com.design_patterns.facade;
/**
* 定义DVDPlayer播放类
*/
public class DVDPlayer {
//使用单例模式(饿汉式)
private static DVDPlayer instance = new DVDPlayer();
//构造方法私有化
private DVDPlayer(){
};
//获取单例模式对象
public static DVDPlayer getInstance(){
return instance;
}
public void on(){
System.out.println(" dvd on ");
}
public void off(){
System.out.println(" dvd off ");
}
public void play(){
System.out.println(" dvd is playing ");
}
public void pause(){
System.out.println(" dvd pause ");
}
}
プロジェクタークラス
package com.design_patterns.facade;
/**
* 定义放映机类
*/
public class Projector {
private static Projector instance = new Projector();
private Projector(){
};
public static Projector getInstance(){
return instance;
}
public void on(){
System.out.println(" Projector on ");
}
public void off(){
System.out.println(" Projector off ");
}
public void focus(){
System.out.println(" Projector focus ");
}
}
画面(画面)
package com.design_patterns.facade;
/**
* 定义屏幕
*/
public class Screen {
//使用单例模式(饿汉式)
private static Screen instance = new Screen();
//构造方法私有化
private Screen(){
};
//获取单例模式对象
public static Screen getInstance(){
return instance;
}
public void up(){
System.out.println(" screen up ");
}
public void down(){
System.out.println(" screen down ");
}
}
オーディオクラス
package com.design_patterns.facade;
/**
* 定义音箱,输出影片声音
*/
public class Stereo {
//使用单例模式(饿汉式)
private static Stereo instance = new Stereo();
//构造方法私有化
private Stereo(){
};
//获取单例模式对象
public static Stereo getInstance(){
return instance;
}
public void on(){
System.out.println(" stereo on ");
}
public void off(){
System.out.println(" stereo off ");
}
public void up(){
System.out.println(" stereo up ");
}
public void down(){
System.out.println(" stereo down ");
}
}
シネマ照明
package com.design_patterns.facade;
/**
* 定义电影院内的灯光类
*/
public class TheaterLight {
//使用单例模式(饿汉式)
private static TheaterLight instance = new TheaterLight();
//构造方法私有化
private TheaterLight(){
};
//获取单例模式对象
public static TheaterLight getInstance(){
return instance;
}
public void on(){
System.out.println(" TheaterLight on ");
}
public void off(){
System.out.println(" TheaterLight off ");
}
public void bright(){
System.out.println(" TheaterLight bright ");
}
public void dim() {
System.out.println(" TheaterLight dim ");
}
}
外観パターンの実装であるシネマクラス
package com.design_patterns.facade;
/**
* 定义电影院类,通过方法封装各个子部分的实现细节
*/
public class HomeTheaterFacade {
//定义各个子系统的对象
private DVDPlayer dvdPlayer;
private PopCorn popCorn;
private Projector projector;
private Screen screen;
private Stereo stereo;
private TheaterLight theaterLight;
//通过构造方法为电影院各个子系统部分获取实例化对象
public HomeTheaterFacade(){
this.dvdPlayer = DVDPlayer.getInstance();
this.popCorn = PopCorn.getInstance();
this.projector = Projector.getInstance();
this.screen = Screen.getInstance();
this.stereo = Stereo.getInstance();
this.theaterLight = TheaterLight.getInstance();
}
//操作分为 4 步
/**
* 进行准备工作
*/
public void ready(){
System.out.println("----- 电影院准备放映影片 -----");
popCorn.on();
popCorn.pop();
screen.down();
projector.on();
stereo.on();
dvdPlayer.on();
theaterLight.dim();
}
/**
* 电影院开始放电影工作
*/
public void play(){
System.out.println("----- 电影院开始放映影片 -----");
dvdPlayer.play();
}
/**
* 电影院进行暂停工作
*/
public void pause(){
System.out.println("----- 电影院暂停放映影片 -----");
dvdPlayer.pause();
}
/**
* 电影院电影放映结束动作
*/
public void end(){
System.out.println("----- 电影院结束放映影片 -----");
popCorn.off();
theaterLight.bright();
screen.up();
projector.off();
stereo.off();
dvdPlayer.off();
}
}
クライアント(テスト)クラス
package com.design_patterns.facade;
public class Client {
public static void main(String[] args) {
HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade();
homeTheaterFacade.ready(); //电影院准备工作
homeTheaterFacade.play(); //电影院开始放电影
homeTheaterFacade.pause(); //电影院暂停放电影
homeTheaterFacade.end(); //电影院结束影片放映
}
}
運転結果
----- 电影院准备放映影片 -----
popcorn on
popcorn pop
screen down
Projector on
stereo on
dvd on
TheaterLight dim
----- 电影院开始放映影片 -----
dvd is playing
----- 电影院暂停放映影片 -----
dvd pause
----- 电影院结束放映影片 -----
popcorn off
TheaterLight bright
screen up
Projector off
stereo off
dvd off
要約する
ヒヒ、アピアランスモードは非常に理解しやすいと思います。本質は、一貫したインターフェイスを介してイベントの実装の詳細をカプセル化し、最後にカプセル化実装関数を呼び出すことです。さて、ここで、さあ~~~