概念
簡單工廠模式:根據不同的條件,使用一個工廠類來創建不同類的對象的一種設計模式,用來解決創建對象的問題。
應用場景
- 有幾個不同的類,且這幾個類有共同的父類;
- 在不同的條件下用這幾個類創造不同的對象;
一般步驟
- 寫一個抽象類作爲不同條件的幾個類的父類,例如寫一個“操作符類”作爲“加法類”和“減法類”的父類;
// 僞代碼 class Operator { ... virtual double GetResult() = 0; }
- 寫具體的子類,並且繼承前面的抽象類
// 僞代碼 class OperatorAdd : public Operator { double GetResult(){ ... } } class OperatorSub : public Operator { double GetResult(){ ... } } ```
- 寫一個工廠類,根據不同的條件創建對象
// 僞代碼 class SimpleFactory { ... Operator *creatOperation(char cOpe) { Operator *ope = NULL; switch(cOpe) { case '+': ope = new OperatorAdd(); break; case '-': ope = new OperatorSub(); break; } return ope; } }
具體實例
// SimpleFactory.cpp
#include <cstdio>
class Operator // 抽象類-計算器類
{
public:
virtual void GetResult()=0;
void SetNumA(double numA)
{
a = numA;
}
void SetNumB(double numB)
{
b = numB;
}
protected:
double a,b;
};
class OperatorAdd : public Operator //加法器類,繼承計算器類
{
public:
void GetResult()
{
printf("a+b=%lf\n",a+b);
}
};
class OperatorSub : public Operator // 減法器類,繼承計算器類
{
public:
void GetResult()
{
printf("a-b=%lf\n",a-b);
}
};
class SimpleFactory// 工廠類,根據不同符號,創建不同的計算器對象
{
public:
static Operator * creatOperator(char cOpe)
{
Operator *ope = NULL;
switch (cOpe)
{
case '+':
ope = new OperatorAdd();
break;
case '-':
ope = new OperatorSub();
break;
default:
printf("error ope = %c\n",cOpe);
break;
}
}
};
int main()
{
Operator *ope = NULL;
ope = SimpleFactory::creatOperator('+');// 創建加法器對象
ope->SetNumA(1.1);
ope->SetNumB(2.2);
ope->GetResult();
delete ope;
ope = SimpleFactory::creatOperator('-');// 創建減法器對象
ope->SetNumA(3.3);
ope->SetNumB(2.2);
ope->GetResult();
delete ope;
return 0;
}
參考資料
程傑老師的《大話設計模式》