你可以在保持文章完整和保留本宣告的情況下**、分發和印刷等。
今天乙個好朋友發了上面這個貼,並邀我過去看看。就去看了看,當時覺得應該用工廠模式去解決,隨便寫了幾句上去,後來又有衝動想寫一下**,正好重溫一下經典的工廠模式,就寫了如下**。主要應用了工廠模式和單件模式。
現在如果要增加新的指令需要修改的地方也是相當地少:只要繼承自ccommand,並實現自己的處理函式,然後向類工廠登記一下就可以了。
廢話不多說了,看**吧。感覺寫這個東西學到不少東西,所謂溫故而知新嘛。
先看問題:
name[,parameter[,value]]
其中,parameter 和 value 是可以省略的。command分為不同的種類,對於特定的種類,parameter 和 value 是不是出現是一定的,如 "start"命令就沒有parameter 和 value ,而"send"命令就有。頭和我說,用類的層次結構來表示,外面在套乙個解析類。我是這樣做的
class ccommand;
那麼,按照我們頭的說法,我需要:
class cstartcommang : public ccommand
解析類cscriptexplain又該怎麼定義呢?
我的參考**,拷貝到乙個.cpp檔案中,即可編譯、執行。我用的是vc6,相信ms的編譯器也可以,gcc、bcb、devc++應該也行。
#pragma warning(disable:4786)
#include
#include
#include
#include
#include
//也可以採用建構函式無參,docommand有參的方式,那樣就可以全部ccommand的派生類做成單件。
class ccommand
ccommand(const std::string& strcmd):m_strcmd(strcmd){}
public:
virtual ~ccommand(){}
virtual void docommand()=0;
static ccommand* createinstance(const std::string& strcmd);
const std::string& getcommandstring()
private:
std::string m_strcmd;
};class cstartcommand:public ccommand
cstartcommand(const std::string& strcmd):ccommand(strcmd)
public:
virtual ~cstartcommand(){}
void docommand()
static ccommand* createinstance(const std::string& strcmd)
};class csendcommand:public ccommand
csendcommand(const std::string& strcmd):ccommand(strcmd)
public:
virtual ~csendcommand(){}
void docommand()
static ccommand* createinstance(const std::string& strcmd)
};typedef ccommand*(*createinstancefunc)(const std::string&);
class ccommandfactory
public:
virtual ~ccommandfactory(){}
static ccommandfactory* getinstance()
void addcommandfunc(std::string& strcmdname, createinstancefunc func)
ccommand* createcommand(std::string& strcmdname, std::string strcmd)
void releasecommand(ccommand* p)
private:
std::mapm_commandfuncmap;
};class cscriptexplain
if(idx == max_cmd_len)break;
tmp[idx] = '\0';
ccommand* pcmd = pfactory->createcommand(std::string(tmp), std::string(strcmd+idx));
pcmd->docommand();
pfactory->releasecommand(pcmd);
}while(true);}};
int main()
my_script.txt的內容:
start
send,port,5555
send,port,8888
send,port,8673
單例模式和工廠模式
實現思路 將構造方法私有化 宣告本類型別的靜態私有屬性 提供共有靜態方法獲取 本類物件 class static x new public static get class static x null public static get 優點 缺點 產品介面 public inte ce produ...
重溫設計模式之 簡單 工廠模式
定義乙個建立物件的介面,讓其子類自己決定例項化哪乙個工廠類,工廠模式使其建立過程延遲到子類進行。常用場景 多資料庫實現 多種媒介的日誌記錄 uml圖 客戶端 public class client 簡單工廠模式存在乙個問題,如示例中需要增加新的資料庫型別時,需要修改employeedaofactor...
設計模式 工廠模式和單例模式
在平常實用類的時候,往往要進行類功能的擴充套件,如果直接在裡面進行擴充套件,有可能會對類裡面的其他功能產生影響,所以在擴充套件功能的時候就要重新寫類,這就要採用繼承的方式,如 1 class yunsuan 2 8 9class jia extends yunsuan 造乙個加的子類繼承父類 10 ...