デザインパターン研究ノート(4) - モデルのタイプ(行動パターン)

行動パターン(行動パターン)

  1. デューティチェーン(責任のチェーン)
    • オブジェクトの複数の要求を処理する機会は、要求の送信者と受信者との間の結合を回避するために、オブジェクトがチェーンに接続され、オブジェクトは彼を処理するまで、チェーンに沿って要求を渡します
    • 代表的なアプリケーション:サーブレットフィルタ
  2. コマンドモード(コマンド)
    • コマンドモードは、アクション(行動)モードまたはトランザクション(トランザクション)モードの別名であるオブジェクトの行動パターンであり、
    • 我々はパラメータ化のために要求する異なるクライアントを使用できるように、それは、オブジェクトの要求をカプセル化します。
    • 要求キューまたはログ要求、および取り消し可能操作をサポート。
    • コマンドモードコマンドの性質は、分離コマンドや指示を行うための責任に責任をカプセル化されています
    • 5つのロール:
      • コマンド:コマンド抽象クラス
      • ConcreteCommand:具体的なコマンドクラス:レシーバレシーバは、特定の操作にバインドするために参照を保持しています
      • 実行者:呼び出し側
      • レシーバー:コマンド受信
      • クライアント:クライアントクラス
      //抽象命令
      public interface Command {
       void execute();
      }
      //具体命令:开灯
      public class LightOnCommand implements Command {
       private Light light;
       public LightOnCommand(Light light) {
           this.light = light;
       }
       public void execute() {
           light.lightOn();
       }
      }
      //具体命令:关灯
      public class LightOffCommand implements Command {
       private Light light;
       public LightOffCommand(Light light) {
           this.light = light;
       }
       public void execute() {
           light.lightOff();
       }
      }
      //调用者Invoker
      public class XiaoAi {
       private Command command;
       public void setCommand(Command command) {
           this.command = command;
       }
       public void doCommand() {
           command.execute();
       }
      }
      //命令接收者Receiver
      public class Light {
       public void lightOn() {
           System.out.println("灯打开了!!");
       }
       public void lightOff() {
           System.out.println("灯关上了!!");
       }
      }
      //客户类
      public class Client {
       public static void main(String[] args) {
           XiaoAi xiaoAi = new XiaoAi();
           Light light = new Light();
           System.out.println("帮我把灯开一下!");
           LightOnCommand lightOnCommand = new LightOnCommand(light);
           xiaoAi.setCommand(lightOnCommand);
           xiaoAi.doCommand();
      
           System.out.println("帮我关一下灯!");
           LightOffCommand lightOffCommand = new LightOffCommand(light);
           xiaoAi.setCommand(lightOffCommand);
           xiaoAi.doCommand();
       }
      }
  3. インタプリタパターン(インタプリタ)
    • Interpreterパターンは、行動の一種です。
    • インタプリタを提供しながら、与えられた言語後、インタプリタモードは、その文法表現のいずれかを定義することができます。
    • クライアントは、このステートメントの文を解釈するインタプリタを使用することができます。
    • 代表的なアプリケーション:4つの混合コンピューティングの解析は、XML文書を解析します
  4. イテレータパターン(イテレータ)
    • オブジェクト表現を公開せず、逐次重合オブジェクト内の種々の要素にアクセスを提供するための方法
    • 代表的なアプリケーション:Javaのイテレータ
  5. 仲介モデル(メディエータ)
    • 仲介モデル、また、公知のメディエーターモデルは、そのオブジェクトの行動パターンです。
    • オブジェクトのセットは、それが疎結合ように仲介保持オブジェクトが明示的に、相互に参照する対話、およびそれらの間の相互作用とは独立して変更することができるカプセル化する調停オブジェクトを使用します。
    • 典型的なアプリケーション:マルチチャットルーム、MVCアーキテクチャ(コントローラが仲介ある)、及び複数のインタフェースGUIの開発を制御するための参照
    • 4つのロール:(着信クラスメソッド仲介オブジェクトで同僚)
      • メディエータ:メディエータ抽象
      • ConcreteMediator:特定調停者
      • 同僚:抽象クラスの同僚
      • ConcreteColleague:特定のクラスの同僚
  6. メモモード(メメント)
    • メモのオブジェクトは、他の目的(スナップショット)物体の内部状態のスナップショットを格納するために使用されます。
    • パッケージを破壊することなく、メモモードに意図されたオブジェクトが適切な将来的に保存された状態に復元することができるように、それは、オブジェクトの状態、および外部の、保存をキャプチャします。
    • 代表的なアプリケーション:
      • 0は、セッションとクッキーの使用は、メモモードです。
      • 1、後でそれを後悔。
      • 2、ゲームをプレイアーカイブ。
      • 3、Ctrl + ZでのWindows。
      • 図4に示すように、IEを後退させます。
      • 5、取引管理データベース。
  7. モードオブザーバ(オブザーバー)
    • 4つの役割:(オブザーバーは、対象物を保持し、初期化時に目標に自分自身を登録します。ターゲットの変更は、視聴者に通知する場合には)
      • 件名:目標
      • ConcreteSubject:ターゲット
      • オブザーバー:オブザーバー
      • ConcreteObserver:特定のオブザーバー
    • Javaのネイティブインタフェース:観察可能な、オブザーバー
    • 仲介モデルVS:
      • 同僚(同僚)との相互作用することを強調するメディエーター(仲介者)クラス
      • ターゲット・クラス(対象)におけるオブザーバー(観察)は変更後のユニファイドコミュニケーションオブザーバの目標ことを強調しました
  8. モード状態(ステート)
    • 別名状態オブジェクト(アメリカ合衆国用オブジェクト)、オブジェクトモデルの状態は、行動パターンであります
    • その内部状態が変更されたときにオブジェクトがその動作を変更することができます、オブジェクトは、そのクラスを変更することが表示されます。
    • キー状態モデルは、オブジェクトの状態を表すための特別な抽象クラスの導入で、我々は、このクラス抽象クラスの状態を呼び出し、各状態の特定のオブジェクトクラスは、このクラスを継承し、別の特定のクラスで異なる状態を実装します様々な状態の間の遷移を含む行動状態、
    • 3つの役割:
      • コンテキスト:環境
      • 状態:状態抽象クラス
      • ConcreteState:特殊ステータスクラス
      public class Context {
       private State state;
       public void setState(State state) {
           this.state = state;
       }
       public void request(String sampleParameter) {
           state.handle(sampleParameter);
       }
      }
      public interface State {
       public void handle(String sampleParameter);
      }
      public class ConcreteStateA implements State {
       public void handle(String sampleParameter) {
           System.out.println("ConcreteStateA handle :" + sampleParameter);
       }
      }
      public class ConcreteStateB implements State {
       public void handle(String sampleParameter) {
           System.out.println("ConcreteStateB handle :" + sampleParameter);
       }
      }
      public class Client {
       public static void main(String[] args){
           State state = new ConcreteStateB();
           Context context = new Context();
           context.setState(state);
           context.request("test");
       }
      }
  9. 戦略モード(戦略)
    • 一連のアルゴリズムを定義し、各アルゴリズムは、一緒にパッケージされ、そして、彼らはお互いに交換することができるようになっています。
    • 戦略モードは、ポリシーモード(ポリシー)として知られている顧客の利用の変化、のアルゴリズムは独立してできます。
    • 戦略モードは、オブジェクトの行動パターンです。
    • ステータスモード対:
      • クラスを露出させるために具体的な戦略戦略モードでは、呼び出し側は、修正するために、各ポリシーで特定の違いを理解する必要があります。
      • モード状態変化の状態にかかわらず、外部の、その内部状態の変化によって決定されます
      • 状態オブジェクトは、クラスのメンバ変数環境、政策環境のパラメータオブジェクトは、クラスの方法であります
    • 3つの役割:
      • コンテキスト:環境
      • 戦略:戦略抽象クラス
      • ConcreteStrategy:具体的な戦略
  10. Template Methodパターン(テンプレート法)
    • パブリック抽象クラスは、サブクラスで実装することができますファッション/テンプレートのそのメソッドの実装は、メソッドをオーバーライドする必要が定義しますが、呼び出しは抽象クラスのように定義されます
    • 典型的な例:サービス(サーブレット)のdoGet()のdoPost()メソッド
  11. Visitorパターン(ビジター)
    • 5つのロール:
      • 抽象の訪問者:アクセス動作の各特定の要素クラスの宣言オブジェクト構造のため。
      • 特定の訪問者:特定の各要素を達成するためのアクセス方法。
      • 抽象要素:ビジターアクセス動作、通常は抽象クラスとインタフェースを受け、メソッド宣言を受け入れます。
      • 特定の要素:訪問者に対応したアクセスメソッドを呼び出し、メソッドを受け入れる実装します。
      • オブジェクト構造:オブジェクトの要素を格納し、トラバーサル方法を提供するモードの組み合わせを用いて実装することができます
    • 設計パターンデータの分離操作のデータ構造
    • Javaのような過負荷には、上院への異なるアプローチは、達成するための別の方法であります
    interface Visitor {
        void visit(Games games);
        void visit(Photos photos);
    }
    interface Computer {
        void accept(Visitor visitor);
    }
    
    class ZhangSan implements Visitor {
        public void visit(Games games) {
            games.play();
        }
        public void visit(Photos photos) {
            photos.watch();
        }
    }
    class LiSi implements Visitor {
        public void visit(Games games) {
            games.play();
        }
        public void visit(Photos photos) {
            photos.watch();
        }
    }
    class Games implements Computer {
        public void accept(Visitor visitor) {
            visitor.visit(this);
        }
        public void play() {
            System.out.println("play lol");
        }
    }
    class Photos implements Computer {
        public void accept(Visitor visitor) {
            visitor.visit(this);
        }
        public void watch() {
            System.out.println("watch scenery photo");
        }
    }
    
    class ObjectStructure {
        private List<Computer> computers = new ArrayList<Computer>();
        public void action(Visitor visitor) {
            computers.forEach(c -> {
                c.accept(visitor);
            });
        }
        public void add(Computer computer) {
            computers.add(computer);
        }
    
        public static void main(String[] args) {
            ObjectStructure os = new ObjectStructure();
            os.add(new Games());
            os.add(new Photos());
            // 创建一个访问者
            Visitor visitor = new ZhangSan();
            os.action(visitor);
    
        }
    }

おすすめ

転載: www.cnblogs.com/kintanx/p/11444399.html