这是包含观察者模式的有效方法吗?

时间:2016-02-07 19:19:20

标签: c++ class

为了摆脱全局变量,我决定看一下观察者模式。我想以最简单的方式实现它。

我想解决的问题是:

我有一个窗口类来处理主窗口的大小调整。 如果窗口调整大小,我有不同的类,当发生这种情况时需要通知。 所以我写了一个小的Observer接口:

#pragma once
class IObserverWindow{
public:
   virtual void onResizing(int width, int height) = 0;
};

我将此界面添加到我的光标类。

现在要获取窗口类注册的客户端(游标类),我实现了一个向量和一个函数:

#include "IObserverWindow.h"
...
public:
   void registerClient(IObserverWindow* client);
...
private:
   std::vector<IObserverWindow*> list;

在我的主类中,我调用这两个类并注册游标类:

bwindow = new BioWindow();
bwindow->init("TestWindow", 1200, 800);
bwindow->showOSCursor(true);

bcursor = new Cursor();
bcursor->setIcon("cursor.png");
bwindow->registerClient((IObserverWindow*)bcursor);

FYI:游标类继承IObserverWindow,窗口类只包含IObserverWindow

由于窗口类对游标类一无所知,我必须将游标类强制转换为IObserverWindow接口(如寄存器函数中所定义)。

这可以在没有编译器抱怨的情况下运行,并且在程序运行时它可以正常工作,但是......

我不确定这是否是正确的方法。 我是否应该创建一个父类来向我的向量注册,以便所有观察者类(如游标类)都是来自此父级的子类?

或者它实际上是将游标类强制转换为其接口的有效方法吗?

0 个答案:

没有答案