Observer(관찰자) - 객체 동작 모드
4245 단어 관찰자
대상 간의 일대다 의존 관계를 정의합니다. 대상의 상태가 바뀌면 그 대상에 의존하는 모든 대상이 알림을 받고 자동으로 업데이트됩니다.
2. 별명
종속(Depenents), 게시 - 구독(Publish-subscribe)
3. 동기
하나의 목표는 임의의 숫자로 그것에 의존하는 관찰자가 있을 수 있다.일단 목표의 상태가 바뀌면 모든 관찰자가 통지를 받는다.이 알림의 응답으로 모든 관찰자는 목표의 동기화 상태를 위해 목표를 조회할 것이다.
4. 적용성
4
4
4
5. 구조
6. 코드 인스턴스
//Subject.h#include #include class AbstractObserver;class AbstractSubject
{public: virtual void Attach(std::shared_ptr pObserber)=0; virtual void Notify()=0; virtual void SetState(int state)=0; virtual int GetState()=0;
};class ConcreteSubject : public AbstractSubject
{public:
ConcreteSubject(); ~ConcreteSubject(); virtual void Attach(std::shared_ptr pObserber); virtual void Notify(); virtual void SetState(int state); virtual int GetState();private:
std::vector<:shared_ptr>> m_vecObservers; int m_state;
};
//Observer.h#include class AbstractSubject;class AbstractObserver
{public: virtual void Update()=0;
};class ConcreteObserver1 : public AbstractObserver
{public:
ConcreteObserver1(std::shared_ptr pSubject); ~ConcreteObserver1(); virtual void Update();private:
std::shared_ptr m_Subject;
};class ConcreteObserver2: public AbstractObserver
{public:
ConcreteObserver2(std::shared_ptr pSubject); ~ConcreteObserver2(); virtual void Update();private:
std::shared_ptr m_Subject;
};class ConcreteObserver3 : public AbstractObserver
{public:
ConcreteObserver3(std::shared_ptr pSubject); ~ConcreteObserver3(); virtual void Update();private:
std::shared_ptr m_Subject;
};
//Subject.cpp#include "Subject.h"#include "Observer.h"ConcreteSubject::ConcreteSubject()
{
}
ConcreteSubject::~ConcreteSubject()
{
}void ConcreteSubject::SetState(int state)
{
m_state = state;
}void ConcreteSubject::Attach(std::shared_ptr pObserver)
{
m_vecObservers.push_back(pObserver);
}int ConcreteSubject::GetState()
{ return m_state;
}void ConcreteSubject::Notify()
{ for(auto iter = m_vecObservers.begin(); iter != m_vecObservers.end(); ++iter)
{
(*iter)->Update();
}
}
// Observer.cpp#include "Observer.h"#include "Subject.h"#include ConcreteObserver1::ConcreteObserver1(std::shared_ptr pSubject)
: m_Subject(pSubject)
{
}
ConcreteObserver1::~ConcreteObserver1()
{
}void ConcreteObserver1::Update()
{
std::cout <GetState() < pSubject)
: m_Subject(pSubject)
{
}
ConcreteObserver2::~ConcreteObserver2()
{
}void ConcreteObserver2::Update()
{
std::cout <GetState() < pSubject)
: m_Subject(pSubject)
{
}
ConcreteObserver3::~ConcreteObserver3()
{
}void ConcreteObserver3::Update()
{
std::cout <GetState() <
//client.cpp#include "Observer.h"#include "Subject.h"int main()
{
std::shared_ptr pSubject(new ConcreteSubject);
std::shared_ptr pObserver1(new ConcreteObserver1(pSubject));
std::shared_ptr pObserver2(new ConcreteObserver2(pSubject));
std::shared_ptr pObserver3(new ConcreteObserver3(pSubject));
pSubject->Attach(pObserver1);
pSubject->Attach(pObserver2);
pSubject->Attach(pObserver3);
pSubject->SetState(5);
pSubject->Notify(); while(1);
}
7. 테스트 결과
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Objective-C(19, 알림-메시지 발송 모드 중 하나)-iOS 개발 기반1. 몇 가지 기본 개념(1) 알림: 대상을 대상으로 하는 프로그램에서 발생하는 시간을 여러 대상에게 통지하는 메시지 발송 모델이 필요할 때가 있다.(2) 통지센터: 통지를 기대하는 대상은 통지센터에 기대하는 통지를...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.