「ヘッドファーストデザインパターン」の研究ノート - スキンモード

スキンモードでは、インターフェイスを簡素化するために設計されたインターフェイスを、変更、一つまたは複数のクラスのすべての複雑さは、清潔で明るい表情を明らかにし、背後に隠されています。

ケース

我々は、我々はこれらの手順を実行する必要があり、最も厄介な方法によると、自分のホームシアターで映画を鑑賞します:

  1. オープンポップコーンマシン
  2. スタートポップコーン
  3. ライトを暗く
  4. 画面下へ
  5. プロジェクターの電源をオンに
  6. プロジェクターへの入力がDVDに切り替えられます
  7. プロジェクターは、ワイドモードが設けられています。
  8. オープンアンプ
  9. 攻撃は、入力がDVDに設定されて置きます
  10. アンプはサラウンドサウンドに設定されています
  11. に増幅量
  12. オープンDVDプレーヤー
  13. DVDの再生を開始

これらのステップは、私たちは映画を見た後、我々はそれがより多くの外観と一緒に便利なモード処理があるので、再度、これらのステップに逆の操作を置くことができない、すべてがシャットダウンしたい、映画を見始め、行われます。

私たちは、特定のコードを見てください。

public class HomeTheaterFacade {
    Amplifier amp;
    Tuner tuner;
    DvdPlayer dvd;
    CdPlayer cd;
    Projector projector;
    TheaterLights lights;
    Screen screen;
    PopcornPopper popper;

    public HomeTheaterFacade(Amplifier amp, Tuner tuner, DvdPlayer dvd, CdPlayer cd, Projector projector, TheaterLights lights, Screen screen, PopcornPopper popper) {
        this.amp = amp;
        this.tuner = tuner;
        this.dvd = dvd;
        this.cd = cd;
        this.projector = projector;
        this.lights = lights;
        this.screen = screen;
        this.popper = popper;
    }

    public void watchMovie(String movie) {
        System.out.println("Get ready to watch a movie...");
        popper.on();
        popper.pop();
        lights.dim(10);
        screen.down();
        projector.on();
        projector.wideScreenMode();
        amp.on();
        amp.setDvd(dvd);
        amp.setSurroundSound();
        dvd.on();
        dvd.play(movie);
    }

    public void endMovie() {
        System.out.println("Shutting movie theater down...");
        popper.off();
        lights.on();
        screen.up();
        projector.off();
        amp.off();
        dvd.stop();
        dvd.eject();
        dvd.off();
    }
}

これが私たちのホームシアター外観コードです。これは、このクラスに組み合わせてパッケージ化され、多くのサブシステムコンポーネントが含まれています。私たちは、今やるべきことendMovie()、映画のニーズは事業の統合を見ることである1 watchMovie(文字列の映画)、書き込みの二つの方法、統一されたインターフェイスにこれらのコンポーネントを統合する必要があり、それはムービープレーヤーとの統合の必要性の終わりです。

今、私たちは、コンポーネントのコードを見て非常に簡単です。

public class Amplifier {
    public void on() {
        System.out.println("Amplifier on");
    }

    public void setDvd(DvdPlayer dvd) {
        System.out.println("Set dvd");
    }

    public void setSurroundSound() {
        System.out.println("Surround sound");
    }

    public void off() {
        System.out.println("Amplifier off");
    }
}

public class CdPlayer {}

public class DvdPlayer {
    public void on() {
        System.out.println("Dvd on");
    }

    public void play(String movie) {
        System.out.println("Play " + movie);
    }

    public void stop() {
        System.out.println("Dvd stop");
    }

    public void eject() {
        System.out.println("Dvd eject");
    }

    public void off() {
        System.out.println("Dvd off");
    }
}

public class PopcornPopper {
    public void on() {
        System.out.println("Popcorn popper on");
    }

    public void pop() {
        System.out.println("Making popcorn");
    }

    public void off() {
        System.out.println("Popcorn popper off");
    }
}

public class Projector {
    public void on() {
        System.out.println("Projector on");
    }

    public void wideScreenMode() {
        System.out.println("Wide screen mode");
    }

    public void off() {
        System.out.println("Projector off");
    }
}

public class Screen {
    public void down() {
        System.out.println("Screen down");
    }

    public void up() {
        System.out.println("Screen up");
    }
}

public class TheaterLights {
    public void dim(int i) {
        System.out.println("Light dim " + i);
    }

    public void on() {
        System.out.println("Light on");
    }
}

public class Tuner {}

サブアセンブリにシステム全体のニーズを収集して、彼らはホームシアタークラスが使用するいくつかの方法を提供します。私たちが使用する場合は、まず我々は唯一の2つのメソッドを呼び出す必要があり、コンストラクタホームシアタークラスのインスタンスを宣言し、これらのコンポーネントのインスタンスを作成し、ちょうど映画を見たり、映画を停止すると宣言することができます。

public class HomeTheaterTestDrive {
    public static void main(String[] args) {
        Amplifier amplifier = new Amplifier();
        Tuner tuner = new Tuner();
        DvdPlayer dvdPlayer = new DvdPlayer();
        CdPlayer cdPlayer = new CdPlayer();
        Projector projector = new Projector();
        TheaterLights theaterLights = new TheaterLights();
        Screen screen = new Screen();
        PopcornPopper popcornPopper = new PopcornPopper();

        HomeTheaterFacade homeTheater = new HomeTheaterFacade(amplifier, tuner, dvdPlayer, cdPlayer, projector, theaterLights, screen, popcornPopper);

        homeTheater.watchMovie("电影");
        System.out.println();
        homeTheater.endMovie();
    }
}

Testクラスは、我々は、我々は前述したように、私たちは映画を見ることができますときだけで、その後、私たちのすべての作業が行われている2つのメソッドを呼び出して、最後の時間を使用し、部品の多くは上記の宣言します唯一終了したら、映画を見にに置く必要がある、唯一のendMovie()メソッドを実行する必要があります。

外観パターン定義

ファサード・パターンが統一されたインタフェース、グループ・サブシステムにアクセスするために使用するインタフェースを提供します。使用するサブシステムが容易に可能に高レベルのインターフェイスの外観。

これは容易に理解され、容易に使用するサブシステムを作るシンプルなインターフェイスを提供することであり、我々は我々のクライアントを操作しやすいリモコンスイッチ、サブシステムの一連の動作を、押したときに、リモコンに似ていますクライアントは、単にこのボタンを押すと、それは単純なアナロジーです。

:また、新しい設計原理含ま「最低限の知識」の原則、唯一のあなたの親しい友人と話を。

あなたがシステムを設計するとき、それは任意のオブジェクトであるかどうか、あなたはそれとどのようにこれらのクラスの相互作用をそれに注意し、どのような相互作用、および有料の注意を払う必要があります。常に私たちを思い出させる、システムの設計が実際に部分的にシステムを変更するために、体全体に影響を与えないように一緒に結合され、あまりにも多くのように、それは他の部分に影響を与えることはできません。システムのメンテナンスコストを削減します。

このオブジェクトのメソッドで私たちは、単に以下の範囲内でメソッドを呼び出します。

  • オブジェクト自体
  • メソッドに渡されたパラメータとしてのオブジェクト
  • この方法で任意のオブジェクトが作成またはインスタンス化
  • 任意のコンポーネントオブジェクト

ここで、アスペクトモードが、それは非常に簡単です、以上です。

公開された26元の記事 ウォンの賞賛2 ビュー2325

おすすめ

転載: blog.csdn.net/qq_42909545/article/details/104975581