Edward_jie

for you, my Hall of Frame

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  92 随笔 :: 45 文章 :: 539 评论 :: 43万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

 

l         概念:

观察者模式是把目标对观察者的依赖进行抽象:使目标只知道自己有若干观察者,但不知道这些观察者具体是谁,可能有多少个;当目标状态改变时只要给这些观察者一个通知,不必作更多的事情。这样目标对观察者的依赖就达到了抽象和最小,而目标对具体观察者的依赖被解除了。

 

l         背景:

  1. 观察者模式要解决的问题为:建立一个(subject)对多(observer)的依赖关系,并且做到当‘一’变化时,依赖这个‘一’的多也能够同步改变。
  2. M类也叫混合类,通常包括纯虚函数,并用作抽象接口。

M类的特点:

  • 不含有任何数据成员
  • 不含有构造函数、析构函数或重载描述符
  • 含有纯虚函数,是抽象类

 

l         作用:

建立一个一对多的依赖关系,并且做到“一”变化的时候,依赖这个一的多也能够同步改变.

 

l         实现:

 

  1. 定义接口类class
复制代码
View Code
class MHTTPEngineObserver //观察器基类(M类)

{

public:

//回调函数

virtual void ResponseReceivedL() = 0;

};

//接口,它有一个纯虚函数,它必须被一个创建类实现。
复制代码

 

Obervers实现接口
复制代码
View Code
class CLxdTextView : public MHTTPEngineObserver  //观察器

{

public:

void ResponseReceivedL(); // 对从M类继承来的纯虚函数进行重新实现

void ConstructL();

private:

//定义一个CHTTPEngine类的指针

CHTTPEngine* iHttpEngine;

};
复制代码

 
  1. 向数据发送方注册
复制代码
void CLxdTextView ::ConstructL()s

{

iHttpEngine = new (ELeave) CHTTPEngine(*this);//初始化的时候,MHTTPEngineObserver即引用了CLxdTextView 的指针本身,这样在后来调用纯虚函数的时候可以调用到CLxdTextView 中重写的ResponseReceivedL函数。

};

复制代码

 

注册Obervers对象的指针
复制代码
class CHTTPEngine //被观察者

{

private:

MHTTPEngineObserver& iObserver;//定义一个M类的引用

public:

CHTTPEngine(MHTTPEngineObserver& aObserver);//引用必须初始化,切记!

void DoSomething();

};
复制代码

 
  1. 调用接口类的函数
复制代码
case THTTPEvent::EResponseComplete:

{

iIfCompleted = ETrue;

// Pass the response buffer by reference to the observer

iObserver.ResponseReceivedL(*iResponseBuffer);// 回调函数

iTimerOut->Cancel();

}

break;
复制代码

在被观察类(engine)中定义抽象类(observer)的一个引用,在观察类(view继承了抽象类,实现纯虚函数)中初始化被观察对象(engine)的时候把自身的指针(view)初始化为被观察者类(engine)中的抽象对象(iobserver),这样在被观察类中iobserver调用还未重写的纯虚函数的时候就可以调用到观察类(view)中重写的纯虚函数,并进行相应的处理数据的操作。

posted on   Edward_诺  阅读(245)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示