poco 1:Notifications
来源:互联网 发布:淘宝115会员怎么搜索 编辑:程序博客网 时间:2024/06/08 00:37
2015-01-27 星期二 20:52:54
本系列为POCO库的理解,先从通知和事件说起。
1、Notifications时序图
2、Notifications Class
3、Notifications Demo
NotificationCenterTest.cpp
test1 无Observer post也不会异常
1
2
3
4
5
void
NotificationCenterTest::test1()
{
NotificationCenter nc;
nc.postNotification(
new
Notification);
}
test2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void
NotificationCenterTest::test2()
{
NotificationCenter nc;
Observer<NotificationCenterTest, Notification> o(*
this
, &NotificationCenterTest::handle1);
nc.addObserver(o);
assert
(nc.hasObserver(o));
assert
(nc.hasObservers());
assert
(nc.countObservers() == 1);
nc.postNotification(
new
Notification);
assert
(_set.size() == 1);
assert
(_set.find(
"handle1"
) != _set.end());
nc.removeObserver(Observer<NotificationCenterTest, Notification>(*
this
, &NotificationCenterTest::handle1));
assert
(!nc.hasObserver(o));
assert
(!nc.hasObservers());
assert
(nc.countObservers() == 0);
}
void
NotificationCenterTest::handle1(Poco::Notification* pNf)
{
poco_check_ptr (pNf);
AutoPtr<Notification> nf = pNf;
_set.insert(
"handle1"
);
}
其他的 testN略过
4、Notifications 分析
可以看出,Notifications的本质就是观察者模式(订阅、发布),发布者用vector来存储订阅者。
Demo中Source和Target都是NotificationCenterTest(实际应用中Source和Target都是独立的,例如Mouse/GUI)。
nc.postNotification(
new
Notification)中的形参Notification从source-->Target。
Notification就是一张通知单(info载体),source可以在postNotification之前对Notification赋值后,
再由postNotification传递给Target(例如Mouse/GUI,Notification就可以携带Mouse的坐标&状态信息)。
模板形参 C对应Target Class,N对应Notification Class。
1
2
3
template
<
class
C,
class
N>
class
Observer:
public
AbstractObserver
{};
0 0
- poco 1:Notifications
- Notifications
- notifications
- Notifications
- Notifications
- Notifications
- Notifications
- notifications
- Notifications
- Notifications
- Notifications
- POCO
- poco库学习笔记(1) poco库的安装
- poco库学习笔记(1) Poco::Net::TCPServerConnection
- Poco Application 框架学习(1)
- Poco::Path & Poco::File
- 【Poco】Poco vs Boost
- Poco::Base64Encoder,Poco::Base64Decoder
- 癫痫病日常护理 02od5vmh
- java中实现分页功能
- UVA 11176 - Winning Streak
- 人人都是产品经理总结 第三章2
- 成年癫痫病能治愈吗 02p4cpw3
- poco 1:Notifications
- Unity3d Android SDK Manager常见问题及脚本编译实现
- eclipse中的System.getProperty("user.dir")
- C++单例模式的介绍
- Asp.net MVC 4 Web编程阅读有感
- C++---------用友元实现数据隐藏
- Linux温习(二)Linux软件安装及管理
- 成年人癫痫病如何治疗 02qeaf4o
- st_link v2制作流程