CARP(합성/집계 재사용 원칙):
클래스 상속을 사용하는 대신 합성/집계를 사용하는 것이 좋습니다.
집계는 약한 '소유권 관계'를 나타냅니다. 즉, 객체 A는 객체 B를 포함할 수 있지만 객체 B는 객체 A의 일부가 아님을 의미합니다.
합성은 부분과 전체 사이의 엄격한 관계를 반영하는 강력한 "소유권 관계"를 나타내며 부분과 전체의 수명주기는 동일합니다.
이점: 객체 구성/집계의 우선순위를 지정하면 각 클래스를 캡슐화하고 단일 작업에 집중하는 데 도움이 됩니다. 이렇게 하면 클래스와 클래스 상속 계층 구조가 작게 유지되고 상속이 제어할 수 없는 거대 규모로 성장할 가능성이 줄어듭니다.
상속은 강력하게 결합된 구조입니다. 상위 클래스가 변경되면 하위 클래스도 변경됩니다. 상속을 사용할 때는 아무 때나 사용하기보다는 'is-a' 관계일 때 사용하는 것을 고려하세요.
브릿지 모드(Bridge): 추상적인 부분과 구현 부분을 분리하여 독립적으로 변경할 수 있습니다.
구현이란 자체 객체를 구현하는 데 사용되는 추상 클래스와 파생 클래스를 말합니다.
테스트 사례:
[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 중국어 홈페이지(m.sbmmt.com)를 참고해주세요!