デザインパターンの研究ノート(C) - 構造モデル(構造パターン)
その他
2019-09-02 07:32:05
訪問数: null
構造モデル(構造パターン)
- アダプタモード(ラッパー(ラッパー))(アダプタ)
- クラスアダプタ(継承を介して)、オブジェクトアダプタ(抽象クラス/インターフェース方法によって達成空)((メンバ変数)を組み合わせることにより)、インタフェースアダプタ
- 別のインターフェイスへの変換インターフェイス、インターフェイスクラスがワークと互換性があることができるように
- オブジェクトアダプタは、同じターゲットにさまざまな人のフィットに適応することができますが、Javaの単一継承、サポートしていません。
- アプリケーションモード:JDBCドライバソフトウェアは、JDBCインターフェースアダプタソフトウェアとデータベースエンジンインタフェースとの間に介在しています
- ブリッジモード(ブリッジ)
- また、シャンク部材(ハンドル本体)モード又はインタフェース(インタフェース)モードとして知られている構造モデルを、オブジェクト
- ソフトウェアシステム、クラスは、2つの別々の次元がある場合2は、システムよりに沿って、独立してスケーリングすることができるように、モードによってこれら二つの次元を分離することができる、変更する「単一責任の原則。」
- 最も親密な寸法「抽象クラス」階層(抽象的な部分)に設計されており、他の次元が階層(部分的に実現)「クラスを達成」するように設計されて
Abstraction pa = new RefinedAbstraction(new ConcreteImplementorA());
pa.operation();
Abstraction pb = new RefinedAbstraction(new ConcreteImplementorB());
pb.operation();
- コンバインモード(コンポジット)
- また、単一のオブジェクトのような類似したオブジェクトのグループのために、全体的なパターンの一部として知られています。
- オブジェクト・ツリー構造、部分的に使用し、全体的なレベルの組み合わせに基づいて、組合せパターン。
- 代表的なアプリケーション:オペレーティングシステムのファイル/ディレクトリ構造
- Decoratorパターン(デコレータ)
- 外観モード(モードファサード)(ファサード)
- ファサードの見えモデルも知られているパターンは、オブジェクトのスキーマ構造であります
- 一貫性のあるインタフェース・サブシステムを提供するために、物体に目を通す必要があり、統一との外部通信サブシステムは、インターフェイスのセットであり、
- Facadeパターンは、使用するサブシステムが容易になり、高レベルのインタフェースを定義します
- フライ級(フライ級)
- フライ級は、技術を共有することにより、再利用し、同一または類似の目的を達成します:
- 同じコンテンツが内部状態(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();
}
}
- エージェントモード(プロキシ)
- 帯電防止剤、動的プロキシ、CGLIBエージェント(コード生成ライブラリ)サブクラスエージェント):3つのカテゴリに分類することができます
- DecoratorパターンVS:
- プロキシモードは、エージェントと実際のオブジェクト間の関係は、通常はコンパイル時に決定されたされ、
- 再帰的デコレータは、実行時に設定することができます
転載: www.cnblogs.com/kintanx/p/11444165.html