子豚学デザインモデル-装飾者モデル
1454 ワード
デコレーションモード
オブジェクトに追加の役割を動的に追加すると、機能を追加すると、サブクラスを生成するよりもDecoratorモードが柔軟になります.
装飾者モードの動作原理:
Decoratorオブジェクト(新しい機能を担当するオブジェクト)から、元のオブジェクトまでのオブジェクト「チェーン」を作成できます.
装飾者モードは、1つの装飾チェーンによって具体的なオブジェクトを実現することを隠しており、各装飾チェーンは1つのComponentオブジェクトから始まり、各装飾者オブジェクトの後ろには別の装飾者オブジェクトが続いており、オブジェクトチェーンはついにConcreteComponentオブジェクトに続く.
装飾者モードUML図
ConcreteComponent:Decoratorオブジェクトに自分の機能を追加させます.ConcreteComponentの派生クラスを使用してコア機能を提供する場合があります.この場合、Componentの代わりにConcreteComponentを使用し、装飾者はConcreteComponentの子クラスに継承されます.Component:ConcreteComponentとDecoratorクラスを実装する方法を定義します.簡単に言えば、クラスがそのクラスに継承されている場合、装飾または被装飾能力があります.Decorator:ConcreteComponentクラスを飾るための特定の装飾機能を持つクラス.
デコレーションモードの適用シーン:1、透明かつダイナミックにオブジェクトに新しい役割を追加したいとき.2、対象に増加の職責を与え、将来増加または減少の可能性がある.3、継承拡張機能ではあまり現実的でない場合は、組み合わせで考えるべきです.装飾者モードの利点:1、継承ではなく組み合わせることで、オブジェクトの機能を動的に拡張する能力を実現します.2、継承方式でオブジェクト機能を拡張することによる柔軟性の悪さを効果的に回避し、サブクラスの拡張を制限しない問題.3、継承と組み合わせの長所と短所を十分に利用し、柔軟性と拡張性の間に完璧なバランスを見つける.4、装飾者と被装飾者との間は同じタイプであるが、それらは互いに完全に独立しており、それぞれ独立して任意に変更することができる.5、大部分のGRASP原則と常用設計原則を遵守し、高集約、低カップリング.装飾者モードの欠点:1、装飾チェーンが長すぎてはいけない.そうしないと効率に影響を与える.2、すべてのオブジェクトがComponentに継承されているため、Componentの内部構造が変化すると、すべてのサブクラス(装飾者と被装飾者)に影響を及ぼすことは避けられない.つまり、継承によって確立された関係は常に脆弱であり、ベースクラスが変化すると、オブジェクトの内部に影響を及ぼすことになる.一方,結合(Decoator HAS A Component)によって確立された関係は,被装飾オブジェクトの外部特徴にのみ影響を及ぼす.3、必要に応じて装飾者モードを使用するだけで、プログラムの複雑さを高め、システムのメンテナンスの難しさを増す.
オブジェクトに追加の役割を動的に追加すると、機能を追加すると、サブクラスを生成するよりもDecoratorモードが柔軟になります.
装飾者モードの動作原理:
Decoratorオブジェクト(新しい機能を担当するオブジェクト)から、元のオブジェクトまでのオブジェクト「チェーン」を作成できます.
A=> =>B=> =>C=> =>D=> =>
装飾者モードは、1つの装飾チェーンによって具体的なオブジェクトを実現することを隠しており、各装飾チェーンは1つのComponentオブジェクトから始まり、各装飾者オブジェクトの後ろには別の装飾者オブジェクトが続いており、オブジェクトチェーンはついにConcreteComponentオブジェクトに続く.
装飾者モードUML図
ConcreteComponent:Decoratorオブジェクトに自分の機能を追加させます.ConcreteComponentの派生クラスを使用してコア機能を提供する場合があります.この場合、Componentの代わりにConcreteComponentを使用し、装飾者はConcreteComponentの子クラスに継承されます.Component:ConcreteComponentとDecoratorクラスを実装する方法を定義します.簡単に言えば、クラスがそのクラスに継承されている場合、装飾または被装飾能力があります.Decorator:ConcreteComponentクラスを飾るための特定の装飾機能を持つクラス.
デコレーションモードの適用シーン:1、透明かつダイナミックにオブジェクトに新しい役割を追加したいとき.2、対象に増加の職責を与え、将来増加または減少の可能性がある.3、継承拡張機能ではあまり現実的でない場合は、組み合わせで考えるべきです.装飾者モードの利点:1、継承ではなく組み合わせることで、オブジェクトの機能を動的に拡張する能力を実現します.2、継承方式でオブジェクト機能を拡張することによる柔軟性の悪さを効果的に回避し、サブクラスの拡張を制限しない問題.3、継承と組み合わせの長所と短所を十分に利用し、柔軟性と拡張性の間に完璧なバランスを見つける.4、装飾者と被装飾者との間は同じタイプであるが、それらは互いに完全に独立しており、それぞれ独立して任意に変更することができる.5、大部分のGRASP原則と常用設計原則を遵守し、高集約、低カップリング.装飾者モードの欠点:1、装飾チェーンが長すぎてはいけない.そうしないと効率に影響を与える.2、すべてのオブジェクトがComponentに継承されているため、Componentの内部構造が変化すると、すべてのサブクラス(装飾者と被装飾者)に影響を及ぼすことは避けられない.つまり、継承によって確立された関係は常に脆弱であり、ベースクラスが変化すると、オブジェクトの内部に影響を及ぼすことになる.一方,結合(Decoator HAS A Component)によって確立された関係は,被装飾オブジェクトの外部特徴にのみ影響を及ぼす.3、必要に応じて装飾者モードを使用するだけで、プログラムの複雑さを高め、システムのメンテナンスの難しさを増す.