構成/集約再利用原則 (CARP):
クラス継承を使用する代わりに、構成/集約を使用することを好みます。
集約は弱い「所有権関係」を表します。これは、オブジェクト A はオブジェクト B を含むことができますが、オブジェクト B はオブジェクト A の一部ではないことを意味します。
合成は、部分と全体の間の厳密な関係を反映する強い「所有関係」を表し、部分と全体のライフサイクルは同じです。
利点: オブジェクトの合成/集約に優先順位を付けると、各クラスをカプセル化し、単一のタスクに集中し続けることができます。こうすることで、クラスとクラス継承階層が小規模に保たれ、継承が制御不能な巨大なものに成長する可能性が低くなります。
継承は、親クラスが変更されると、サブクラスも変更されます。継承を使用するときは、いつでも使用するのではなく、「is-a」関係のときに使用することを必ず検討してください。
ブリッジモード (ブリッジ): 抽象部分を実装部分から分離し、独立して変更できるようにします。
実装とは、独自のオブジェクトを実装するために使用される抽象クラスとその派生クラスを指します。
テストケース:
[code]int main(){ ConerectImplementorA *A = new ConerectImplementorA; ConerectImplementorB *B = new ConerectImplementorB; Abstraction *abs = new Abstraction; abs->setImplementor(A); abs->Operation(); //Output: ConerectImplementorA. Abstraction *abs2 = new Abstraction; abs2->setImplementor(B); abs2->Operation(); //Output: ConerectImplementorB. return 0; }
パターン実装
[code]//Implementor类,实现类 class Implementor{ public: virtual void Operator(){ } }; //具体实现类A class ConerectImplementorA: public Implementor{ virtual void Operator(){ std::cout << "ConerectImplementorA.\n"; } }; //具体实现类B class ConerectImplementorB: public Implementor{ virtual void Operator(){ std::cout << "ConerectImplementorB.\n"; } }; //抽象类->桥接Implementor类 class Abstraction{ protected: Implementor *imp; public: void setImplementor(Implementor *imp){ this->imp = imp; } virtual void Operation(){ imp->Operator(); } }; //被提炼的对象 class RefinedAbstraction: public Abstraction{ virtual void Operation()override{ imp->Operator(); } };
概要: 実装システムは複数の角度から分類される可能性があり、それぞれのカテゴリが変化する可能性があるため、これらの複数の角度を分離し、それらを独立して変更させ、結合間の差異を減らします。
上記は、C++ デザイン パターンのブリッジ モードの簡単な紹介の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。