大話設計模式這本書使用 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 模式了。咱們繼續設計模式,下面實現工廠模式。