Symbian 观察者模式

    技术2022-05-18  17

     

    l         概念:

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

     

     

    l         背景:

    1.       观察者模式要解决的问题为:建立一个(subject)对多(observer)的依赖关系,并且做到当‘一’变化时,依赖这个‘一’的多也能够同步改变。

    2.       M类也叫混合类,通常包括纯虚函数,并用作抽象接口。

    M类的特点:

    Ø         不含有任何数据成员

    Ø         不含有构造函数、析构函数或重载描述符

    Ø         含有纯虚函数,是抽象类

     

    l         作用:

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

     

    l         实现:

     

    1.       定义接口类class

    class MHTTPEngineObserver //观察器基类(M类)

    {

    public:

        //回调函数

        virtual void ResponseReceivedL() = 0;

    };

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

     

    2.       Obervers实现接口

    class CLxdTextView : public MHTTPEngineObserver  //观察器

    {

    public:

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

    void ConstructL()

    private:

        //定义一个CHTTPEngine类的指针

        CHTTPEngine* iHttpEngine;

    };

     

    3.       向数据发送方注册

    void CLxdTextView ::ConstructL()

    {

    iHttpEngine  = new (ELeave) CHTTPEngine(*this);

    };

     

    4.       注册Obervers对象的指针

    class CHTTPEngine //被观察者

    {

    private:

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

    public:

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

        void DoSomething();

    };

     

    5.       调用接口类的函数

    case THTTPEvent::EResponseComplete:

           {

               iIfCompleted = ETrue;

               // Pass the response buffer by reference to the observer

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

               iTimerOut->Cancel();

           }

           break;


    最新回复(0)