设计模式之观察者模式

    xiaoxiao2021-08-16  146

    观察者模式(observer)属于行为模式,如果一个对象发生变化时,其它的对象都要知晓,就像微博的博主和粉丝一样,博主发了个消息,众多的粉丝都要知晓,在这种情况下就可以用观察者模式。 下面是观察者模式的C++实现,代码可到本人github网页下载:设计模式例子

    /* * Example of 'Observer' design pattern. * Copyright (C) 2016 Leo Wang * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <iostream> #include <set> using namespace std; class CSubject; class CObserver { public: virtual void Update(CSubject* p_subject)=0; virtual void GetState()=0; }; class CSubject { public: string msg; set<CObserver*> observersets; public: void AddObserver(CObserver* p_observer) { observersets.insert(p_observer); }; void DetachObserver(CObserver* p_observer) { observersets.erase(p_observer); }; void Update(string& newmsg) { msg=newmsg; for(auto &e:observersets) { e->Update(this); } }; string Getmsg() { return msg; }; }; class CConcreteObserver:public CObserver { public: string msg; public: void Update(CSubject* p_subject) { msg=p_subject->Getmsg(); }; void GetState() { cout<<msg<<endl; } }; int main() { CSubject* cp_subject=new CSubject(); CObserver* cp_observer1=new CConcreteObserver(); CObserver* cp_observer2=new CConcreteObserver(); cp_subject->AddObserver(cp_observer1); cp_subject->AddObserver(cp_observer2); string msg="hello Observer Pattern!"; cp_subject->Update(msg); cp_observer1->GetState(); cp_observer2->GetState(); };
    转载请注明原文地址: https://ju.6miu.com/read-676471.html

    最新回复(0)