>  기사  >  백엔드 개발  >  C++ 디자인 패턴의 브리지 모드에 대한 간략한 소개

C++ 디자인 패턴의 브리지 모드에 대한 간략한 소개

黄舟
黄舟원래의
2017-01-17 13:45:271248검색

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 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.