5.简单工厂模式
1簡單工廠模式的核心內容是:
A:方法獨立
B:沒有工廠,而是通過switch的方式判斷使用哪個方法。
C:理解:帶同一個妹子到同一個地點,妹子可以選擇不同的菜。
2簡單工廠模式的作用:用一個簡單的switch和一個方法控制使用哪個方法。
3簡單工廠模式具體描述
工廠模式:客戶類和工廠類分開。
消費者任何時候需要某種產品,只需向工廠請求即可。
消費者無須修改就可以接納新產品。缺點是當產品修改時,
工廠類也要做相應的修改。如:如何創建及如何向客戶端提供。
?
追MM少不了請吃飯了,麥當勞的雞翅和肯德基的雞翅都是MM愛吃的東西,
雖然口味有所不同,但不管你帶MM去麥當勞或肯德基,
只管向服務員說“來四個雞翅”就行了。麥當勞和肯德基就是生產雞翅的Factory。
?
第一,基類存放數據
第二,派生類有很多,派生類存放數據的操作
第三實現接口類,用靜態函數實現調用各種派生類
4.簡單工廠模式類圖
5.代碼:
#include<iostream>
#include <string>
using namespace std;
?
//工廠模式:客戶類和工廠類分開。
//消費者任何時候需要某種產品,只需向工廠請求即可。
//消費者無須修改就可以接納新產品。缺點是當產品修改時,
//工廠類也要做相應的修改。如:如何創建及如何向客戶端提供。
?
//追MM少不了請吃飯了,麥當勞的雞翅和肯德基的雞翅都是MM愛吃的東西,
//雖然口味有所不同,但不管你帶MM去麥當勞或肯德基,
//只管向服務員說“來四個雞翅”就行了。麥當勞和肯德基就是生產雞翅的Factory。
?
//第一,基類存放數據
//第二,派生類有很多,派生類存放數據的操作
//第三實現接口類,用靜態函數實現調用各種派生類
?
//基類存放數據
class Operation
{
public:
??? double numberA, numberB;//兩個數
??? virtual double? getResult()//獲取結果
??? {
??????? return 0;
??? }
};
?
//派生類存放操作
class addOperation :public Operation
{
??? double getResult()
??? {
??????? return numberA + numberB;
??? }
};
?
//減操作
class subOperation :public Operation
{
??? double getResult()
??? {
??????? return numberA - numberB;
??? }
};
?
//乘操作
class mulOperation :public Operation
{
??? double getResult()
??? {
??????? return numberA*numberB;
??? }
};
?
//除操作
class divOperation :public Operation
{
??? double getResult()
??? {
??????? return numberA / numberB;
??? }
};
?
//個人理解:類此一個控制器,通過傳遞標記來控制調用哪個操作
class operFactory
{
public:
??? static Operation *createOperation(char c)
??? {
??????? switch (c)
??????? {
??????? case '+':
??????????? return new addOperation;
??????????? break;
??????? case '-':
??????????? return new subOperation;
??????????? break;
??????? case '*':
??????????? return new mulOperation;
??????? case '/':
??????????? return new divOperation;
??????????? break;
??????? }
??? }
};
?
int main()
{
??? Operation *oper = operFactory::createOperation('-');
??? oper->numberA = 9;
??? oper->numberB = 99;
??? cout << oper->getResult() << endl;
?
??? cin.get();
??? return 0;
}
運行結果如下:
-90
總結