デザインパターンの研究ノート(C) - 構造モデル(構造パターン)

構造モデル(構造パターン)

  1. アダプタモード(ラッパー(ラッパー))(アダプタ)
    • クラスアダプタ(継承を介して)、オブジェクトアダプタ(抽象クラ​​ス/インターフェース方法によって達成空)((メンバ変数)を組み合わせることにより)、インタフェースアダプタ
    • 別のインターフェイスへの変換インターフェイス、インターフェイスクラスがワークと互換性があることができるように
    • オブジェクトアダプタは、同じターゲットにさまざまな人のフィットに適応することができますが、Javaの単一継承、サポートしていません。
    • アプリケーションモード:JDBCドライバソフトウェアは、JDBCインターフェースアダプタソフトウェアとデータベースエンジンインタフェースとの間に介在しています
  2. ブリッジモード(ブリッジ)
    • また、シャンク部材(ハンドル本体)モード又はインタフェース(インタフェース)モードとして知られている構造モデルを、オブジェクト
    • ソフトウェアシステム、クラスは、2つの別々の次元がある場合2は、システムよりに沿って、独立してスケーリングすることができるように、モードによってこれら二つの次元を分離することができる、変更する「単一責任の原則。」
    • 最も親密な寸法「抽象クラス」階層(抽象的な部分)に設計されており、他の次元が階層(部分的に実現)「クラスを達成」するように設計されて
    Abstraction pa = new RefinedAbstraction(new ConcreteImplementorA());
    pa.operation(); 
    Abstraction pb = new RefinedAbstraction(new ConcreteImplementorB());
    pb.operation();
  3. コンバインモード(コンポジット)
    • また、単一のオブジェクトのような類似したオブジェクトのグループのために、全体的なパターンの一部として知られています。
    • オブジェクト・ツリー構造、部分的に使用し、全体的なレベルの組み合わせに基づいて、組合せパターン。
    • 代表的なアプリケーション:オペレーティングシステムのファイル/ディレクトリ構造
  4. Decoratorパターン(デコレータ)
    • ラッパーは別名アダプタモードと同じ、エイリアス(ラッパー)と呼ばれるかもしれないが、彼らはさまざまな状況に適用されます
    • また、「画家モデル」として知られていた装飾的なパターンは、オブジェクト構造パターンであります
    • 装飾的なパターンは、特に異なると継承され実行時の動作を、高めるために、連続はコンパイル時の挙動を向上させることです
    • 装飾的なパターンは、4つの役割で構成されています。
      • 抽象部材は、インタフェースオブジェクトは、これらのオブジェクトの動的増加責任(方法)であってもよい定義します。
      • 詳細な部材は、特定のコンポーネント・オブジェクトを定義する部材で抽象メソッド宣言を実装し、装飾はそれに追加機能(メソッド)を与えることができます。
      • 装飾的な抽象クラスは、特に増加の責任のための部材に、抽象クラスメンバのサブクラスであり、それらの特定の機能は、サブクラスで実装します。
      • 装飾的なコンクリートの装飾抽象クラスは、メンバーに新しい責務を追加するための責任を負うクラスのサブクラスであります
      //抽象构件
      public abstract class Person {
       public abstract void eat();
      }
      //具体构件
      public class NormalPerson extends Person {
       public void eat() println("吃饭");
      }
      //抽象装饰类
      public class PersonFood extends Person {
       private Person person;
       public PersonFood(Person person){
           this.person = person;
       }
       public void eat() {
           person.eat();
       }
      }
      //具体装饰类
      public class ExpensiveFood extends PersonFood {
       public ExpensiveFood(Person person) {
           super(person);
       }
       public void eat() {
           super.eat();
           eatSteak();
           drinkRedWine();
       }
       public void eatSteak() println("吃牛排");
       public void drinkRedWine() println("喝拉菲");
      }
  5. 外観モード(モードファサード)(ファサード)
    • ファサードの見えモデルも知られているパターンは、オブジェクトのスキーマ構造であります
    • 一貫性のあるインタフェース・サブシステムを提供するために、物体に目を通す必要があり、統一との外部通信サブシステムは、インターフェイスのセットであり、
    • Facadeパターンは、使用するサブシステムが容易になり、高レベルのインタフェースを定義します
  6. フライ級(フライ級)
    • フライ級は、技術を共有することにより、再利用し、同一または類似の目的を達成します:
      • 同じコンテンツが内部状態(IntrinsicState)と呼ばれる共有することができます、
      • 外部環境の内容を共有することができない方は、設定する必要があり、外部状態(外因州)と呼ばれています
    • 通常、フライ級の工場モードで発生し、オブジェクト・フライ級の同じ内部状態を保存するために使用され、プールフライ級(フライ級のプールを)維持する責任フライ級ファクトリを作成する必要があります
    • 代表的なアプリケーション:文字列定数プール、データベース接続プール
    public abstract class Flyweight {
        public String intrinsic = "Flyweight";//内部状态
        protected final String extrinsic;//外部状态
        //要求享元角色必须接受外部状态
        public Flyweight(String extrinsic) {
            this.extrinsic = extrinsic;
        }
        //定义业务操作
        public abstract void operate(int extrinsic);
        //TODO intrinsic内部状态的get/set方法
    }
    public class ConcreteFlyweight extends Flyweight {
        public ConcreteFlyweight(String extrinsic) {
            super(extrinsic);
        }
        public void operate(int extrinsic) {
            System.out.println("具体Flyweight:" + extrinsic);
        }
    }
    public class FlyweightFactory {
        private static HashMap<String, Flyweight> pool = new HashMap<>();
        public static Flyweight getFlyweight(String extrinsic) {
            Flyweight flyweight = null;
            if(pool.containsKey(extrinsic)) {    
                flyweight = pool.get(extrinsic);
                System.out.print("已有 " + extrinsic + " 直接从池中取---->");
            } else {
                flyweight = new ConcreteFlyweight(extrinsic);
                pool.put(extrinsic, flyweight);
                System.out.print("创建 " + extrinsic + " 并从池中取出---->");
            }
            return flyweight;
        }
        public static int getCount(){
            return pool.size();
        }
    }
  7. エージェントモード(プロキシ)
    • 帯電防止剤、動的プロキシ、CGLIBエージェント(コード生成ライブラリ)サブクラスエージェント):3つのカテゴリに分類することができます
    • DecoratorパターンVS:
      • プロキシモードは、エージェントと実際のオブジェクト間の関係は、通常はコンパイル時に決定されたされ、
      • 再帰的デコレータは、実行時に設定することができます

おすすめ

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