我正在學習一些源代碼,我只是想知道,爲什麼一個類(或類)通常以這種方式實現:包含一個「實現」和「接口」指針的C++類的用途是什麼?
class EventHandler
{
...
EventDispatcher* m_Dispatcher;
virtual bool ProcEvent(EventHandler* Sender, int Task, int Event, void* Param);
...
};
class ClassA: public EventHandler
{
...
ClassA* m_Impl;
ClassA* m_Iface;
...
public:
// virtual functions
virtual bool ProcEvent(EventHandler* Sender, int Task, int Event, void* Param);
virtual void OnDataWritten(const PIOResult&) {;}
...
// sample functions
void SetImplement(ClassA* aImpl);
void SetInterface(ClassA* aIface);
ClassA* GetImplement() { return m_Impl; }
ClassA* GetInterface() { return m_Iface; }
bool GetData(list& aList);
};
// Implementation of some sample functions; Most of its function contain more
// or less the same format as below, with the return m_Impl->XXX having the same
// name as the function being defined (e.g. A::XXX)
bool ClassA::GetData(list< Data >& aList)
{
if(m_Impl)
return m_Impl->GetData(aList);
else
return false;
}
class ClassAFactory: public EventHandler
{
private:
ClassAFactory* m_Impl;
ClassAFactory* m_Iface;
protected:
virtual ClassA* MakeTransport();
virtual bool ProcEvent(EventHandler* Sender, int Task, int Event, void* Param);
virtual ClassA* CreateClassA() { return 0; }
...
};
// In some member function of ClassB (ClassB inherits ClassA)
switch(status)
{
case 1:
GetInterface()->OnDataWritten();
case 2:
// ...
};
我相信這是一些設計模式,但我不熟悉它。如果我知道它是什麼,它可以幫助我理解。任何人都可以幫我指出它可能是什麼,或者這些類的用途是什麼,以便這樣實現?
我認爲這是一些事件處理和一些工廠一起使用,但我不知道。
你可以提供一個關於如何使用它的更大提示嗎?如果我沒有更好的瞭解,我會說它是由對面向對象編程有基本誤解的人編寫的。否則,他們不明智地重載了一些大量使用的單詞的含義。 –
這讓我想起了在直C中完成的OO hack,其中您使用指向同一結構的不同版本的指針來鏡像一些面向對象的功能。 – rerun
我已經添加了一些,我希望它可以幫助。 – jasonline