>백엔드 개발 >C++ >C++ 디자인 패턴 적용 사례

C++ 디자인 패턴 적용 사례

WBOY
WBOY원래의
2024-06-01 20:14:00909검색

예, 디자인 패턴은 C++에서 널리 사용됩니다. 관찰자 패턴은 하나의 개체(주체)가 종속 개체(관찰자)를 관리하고 상태 변경을 알리는 일대일 관계입니다. 이 예에서는 날씨 데이터(주체)가 상태 변화를 디스플레이(관찰자)에 알려 디스플레이를 업데이트합니다. 디자인 패턴은 보다 유연하고 유지 관리 가능한 코드를 생성하기 위한 검증된 솔루션을 제공합니다.

C++ 디자인 패턴 적용 사례

C++ 디자인 패턴 적용 사례

디자인 패턴은 일반적인 소프트웨어 개발 문제에 대한 재사용 가능한 솔루션입니다. 이는 개발자가 보다 유연하고 유지 관리하기 쉬운 코드를 만드는 데 도움이 될 수 있는 검증된 모범 사례 세트를 제공합니다.

Observer 패턴

Observer 패턴은 하나의 개체(주체)가 일련의 종속 개체(관찰자)를 관리하는 일대일 관계를 정의합니다. 주체의 상태가 변경되면 모든 관찰자에게 이를 알리므로 그에 따라 업데이트할 수 있습니다.

구현:

#include <iostream>
#include <vector>

class Subject {
public:
    void addObserver(Observer* obs) { observers.push_back(obs); }
    void removeObserver(Observer* obs) { observers.erase(observers.begin() + find(observers.begin(), observers.end(), obs)); }
    void notifyObservers() { for (Observer* obs : observers) obs->update(); }
    int getSubjectState() const { return subjectState; }
    void setSubjectState(int state) { subjectState = state; notifyObservers(); }

private:
    int subjectState;
    std::vector<Observer*> observers;
};

class Observer {
public:
    virtual void update() = 0;
};

class Observer1 : public Observer {
public:
    void update() { std::cout << "Observer 1 notified, subject state: " << subject->getSubjectState() << "\n"; }
    Subject* subject;
};

class Observer2 : public Observer {
public:
    void update() { std::cout << "Observer 2 notified, subject state: " << subject->getSubjectState() << "\n"; }
    Subject* subject;
};

int main() {
    Subject subject;
    Observer1 observer1;
    observer1.subject = &subject;
    Observer2 observer2;
    observer2.subject = &subject;

    subject.addObserver(&observer1);
    subject.addObserver(&observer2);

    subject.setSubjectState(10);
    subject.setSubjectState(20);

    return 0;
}

출력:

Observer 1 notified, subject state: 10
Observer 2 notified, subject state: 10
Observer 1 notified, subject state: 20
Observer 2 notified, subject state: 20

이 예에서는 Subject 是天气数据,Observer 是两个显示屏。当天气数据发生变化(setSubjectState)时,它会通知显示屏(notifyObservers),显示屏会更新其显示的内容(update).

결론:

디자인 패턴은 개발자가 더욱 유연하고 유지 관리하기 쉬운 코드를 만드는 데 도움이 되는 검증된 솔루션을 제공합니다. 관찰자 패턴은 C++ 및 기타 언어에서 널리 사용되는 많은 디자인 패턴 중 하나일 뿐입니다.

위 내용은 C++ 디자인 패턴 적용 사례의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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