我有類Command
這是一類EventManager
的一個實例。類命令在其構造函數中需要兩個參數(host
,target
)。Singleton類,其構造函數需要參數
class EventManager
{
public:
void Event1(){ cmd->Execute(_eventEnum); }
private:
Command *cmd;
};
class Command
{
public:
Command(Host h, Target t)
void Execute();
private:
}
現在,如果我需要在目標類的成員函數使用這種方法cmd->Execute()
,我需要cmd
目標的實例變量或使其全球作爲一個單身。
我不能讓cmd
目標的實例變量,因爲它沒有考慮主機實例。爲了讓單身是添加這樣
class Command
{
public:
CreateInstance(Host h, Target t);
GetInstance();
void Execute();
private:
Command(Host h, Target t);
}
我需要確保GetInstance
被CreateInstance
後調用兩種方法。任何其他的選擇?
目標類是一個低級別的類,只有很少的事件。
Target::LowlevelEvent()
{
cmd->Execute(lowlevelevent) //In Execute for lowlevelevent in Command class, i might call target->reset
}
Iam對不起,不能解釋清楚。問題是,這段代碼有很多事件(方法),可能是像EventManager或Target這樣的類。
在每個這些事件,我將不得不調用一個命令 - >執行()。該命令類需要主機和目標實例,因爲它們可以執行某些操作。 EventManager(Event) cmd-> Execute(_event1); }
Target :: Event2() { cmd-> Execute(_event2); }
命令::執行(活動E) { 如果(_event1 == E) { 宿主> CallAction(); } 如果(_event2 == E) { 靶> CallSomeOtherAction(); }
}
所以現在cmd需要是EventManager和Target的實例變量嗎?現在EventManager具有可以傳遞給Command ctor的主機和目標實例。
但Target無權訪問主機。所以我不能在Target類中創建Command實例。
所以,如果我創建eventmanager進行男星單身我想知道。然後在Target中調用GetInstance()。我知道它的不好主意,但有了這個巨大的設計,iam無法弄清楚。謝謝你的幫助。
'Command'不是'EventManager'的實例,也什麼'Target'樣子?你應該修復你的代碼示例... – Nim 2010-12-16 14:04:40
我認爲這是更多的設計問題。將命令作爲單例表示你只能有一個命令。另外,Target不應該告訴命令自己執行。 – 2010-12-16 14:16:30
你應該儘量[避免單身設計](http://www.techradar.com/news/software/applications/10-mistakes-every-programmer-makes-909424)。 – Default 2010-12-16 14:18:07