大話設計模式這本書使用 C# 語言寫的,我用的是 C++ 語言,最近在看這本書,所以用 C++ 語言走了一遍。
以下是部分筆記,包括代碼
若不涉及面向對象這個概念,我們寫的簡易計算器可能是下面這個樣子
//User.cpp --- 客戶端 #include iostream int main() { using namespace std; cout<>number_a; cout<>opera; cout<>number_b; int avaliable = 1; float result = 0; switch(opera) { case '+': result = number_a + number_b; break; case '-': result = number_a - number_b; break; case '*': result = number_a * number_b; break; case '/': { if(number_b) { result = number_a / number_b; break; } else avaliable = 0; } default: result = 0; } if(avaliable) cout<可以看出,很呆板,很麻煩,自能實現特定計算,不可調用,沒有移植的可能。
而 C++ 是一種面向對象的語言,下面我們用 OOP 思想來重寫這段代碼。
下面是一個簡單的例子,不是很合題,循序漸進。可配合這本書來看。
//Factory.h #ifndef FACTORY_H #define FACTORY_H class operate { public: int number_a; int number_b; char sign; float result; public: float calculate(); }; #endif
//Factory.cpp #include Factory.h float operate::calculate() { switch(sign) { case '+': result = number_a + number_b; break; case '-': result = number_a - number_b; break; case '*': result = number_a * number_b; break; case '/': { if(number_b) { result = number_a / number_b; break; } } default: result = 0; } return result; }
//User.cpp --- 客戶端 #include Factory.h #include iostream int main() { using namespace std; operate myOpera; cout<>myOpera.number_a; cout<>myOpera.number_b; cout<>myOpera.sign; float my_result = myOpera.calculate(); cout<上面就是 OOP 模式了。咱們繼續設計模式,下面實現工廠模式。