为了摆脱全局变量,我决定看一下观察者模式。我想以最简单的方式实现它。
我想解决的问题是:
我有一个窗口类来处理主窗口的大小调整。 如果窗口调整大小,我有不同的类,当发生这种情况时需要通知。 所以我写了一个小的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
接口(如寄存器函数中所定义)。
这可以在没有编译器抱怨的情况下运行,并且在程序运行时它可以正常工作,但是......
我不确定这是否是正确的方法。 我是否应该创建一个父类来向我的向量注册,以便所有观察者类(如游标类)都是来自此父级的子类?
或者它实际上是将游标类强制转换为其接口的有效方法吗?