观察者模式
来源:互联网 发布:图片裁剪软件 编辑:程序博客网 时间:2024/06/06 08:33
一、定义:观察者模式定义了对象之间一对多的依赖,这样一来,当一个对象发生改变时,它的所有依赖就会收到通知发生改变。
二、类图
三、代码
#include<iostream>
#include<list>
using std::list;
using namespace std;
//观察者
class Observer
{
public:
Observer() {}
virtual ~Observer() {}
virtual void Update() {}
};
//博客
class Blog
{
public:
Blog() {}
virtual ~Blog() {}
void Attach(Observer *observer) { m_observers.push_back(observer); }//添加观察者
void Remove(Observer *observer) { m_observers.remove(observer); } //移除观察者
void Notify() //通知观察者
{
list<Observer*>::iterator iter = m_observers.begin();
for(; iter != m_observers.end(); iter++)
(*iter)->Update();
}
virtual void SetStatus(string s) { m_status = s; } //设置状态
virtual string GetStatus() { return m_status; } //获得状态
private:
list<Observer* > m_observers; //观察者链表
protected:
string m_status; //状态
};
//具体博客类
class BlogCSDN : public Blog
{
private:
string m_name;
public:
BlogCSDN(string name): m_name(name) {}
~BlogCSDN() {}
void SetStatus(string s) { m_status = "CSDN通知 : " + m_name + s; } //具体设置状态信息
string GetStatus() { return m_status; }
};
//具体观察者
class ObserverBlog : public Observer
{
private:
string m_name; //观察者名称
Blog *m_blog; //观察的博客,当然以链表形式更好,就可以观察多个博客
public:
ObserverBlog(string name,Blog *blog): m_name(name), m_blog(blog) {}
~ObserverBlog() {}
void Update() //获得更新状态
{
string status = m_blog->GetStatus();
cout<<m_name<<"-------"<<status<<endl;
}
};
int main()
{
Blog *blog = new BlogCSDN("langrun");
Observer *observer1 = new ObserverBlog("tutupig", blog);
blog->Attach(observer1);
blog->SetStatus("观察者模式");
blog->Notify();
delete blog;
delete observer1;
return 0;
}
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- UML序列图
- oracle在线重定义
- java的四种引用
- 捏合视图变化(视图的缩放), 单击随着鼠标移动, 双击放大视图,再双击还原视图
- 关于各种语言的发明时间,c语言为什么有些语法和Pascal相似
- 观察者模式
- Linux编译内核遇到找不到linux/limits.h的问题
- 对java的认识
- [翻译][Java]ExecutorService的正确关闭方法
- 百度的一道面试题(关于Cache的)
- unidac sqlite数据库字符集
- POJ 2359 Questions
- [Redis] redis-cli 命令总结
- ACM暑假集训总结(2014年夏)