更多內容:XiaoJ的知識星球
目錄
- 1.簡單工廠模式
- 1.1 簡單工廠
- 1.2 實現步驟
- 1.3 實現代碼
- 1.4 優缺點
- 2.工廠模式
- 2.1 工廠模式
- 2.2 實現步驟
- 2.3 實現代碼
- 2.4 優缺點
- 3.抽象工廠模式
- 3.1 抽象工廠模式
- 3.2 實現步驟
- 3.3 實現代碼
- 3.4 優缺點
1.簡單工廠模式
.
1.1 簡單工廠
簡單工廠模式屬于類的創建型模式,又叫做靜態工廠方法模式。
通過專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。
.
1.2 實現步驟
1.提供一個工廠類
- 簡單工廠模式的核心,它負責實現創建所有實例的內部邏輯。工廠類可以被外界直接調用,創建所需的產品對象。
2.提供一個抽象產品類
- 簡單工廠模式所創建的所有對象的父類,它負責描述所有實例所共有的公共接口。
3.提供一個具體產品類
- 簡單工廠模式所創建的具體實例對象
.
1.3 實現代碼
#include <iostream>
#include <string>
using namespace std;
//產品抽象父類
class Operation
{ public:double m_leftVlaue;double m_rightValue;virtual double GetResult() = 0;
};
//具體產品實現類
class AddOperation:public Operation
{double GetResult(){return m_leftVlaue + m_rightValue;}
};
class SubOperation :public Operation
{double GetResult(){return m_leftVlaue - m_rightValue;}
};class MulOperation :public Operation
{double GetResult(){return m_leftVlaue * m_rightValue;}
};class DivOperation :public Operation
{double GetResult(){return m_leftVlaue / m_rightValue;}
};
//工廠類
class OperatorFactory
{
public:static Operation* createOperation(char c) {switch (c) {case '+':return new AddOperation;break;case '-':return new SubOperation;break;case '*':return new MulOperation;break;case '/':return new DivOperation;break;}}
};
int main()
{Operation* operation = OperatorFactory::createOperation('+');operation->m_leftVlaue = 1;operation->m_rightValue = 2;cout << operation->GetResult() << endl;return 0;
}
1.4 優缺點
優點:
-
幫助封裝:實現組件封裝,面向接口編程
-
解耦合:客戶端和具體實現類的解耦合
缺點:
-
可能增加客戶端的復雜度
-
不方便擴展子工廠
.
2.工廠模式
2.1 工廠模式
工廠方法模式,同樣屬于類的創建型模式,又被稱為多態工廠模式 。
工廠方法模式的意義:
-
定義一個創建產品對象的工廠接口,將實際創建工作推遲到子類當中。
-
核心工廠類不再負責產品的創建,這樣核心類成為一個抽象工廠角色,僅負責具體工廠子類必須實現的接口,
-
這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工 廠角色的情況下引進新的產品
.
2.2 實現步驟
1.提供一個抽象工廠類 :所有具體工廠類的父類
2.提供與產品對應的工廠類:負責實例化產品對象
3.提供一個抽象產品類:所有產品的父類
4.提供一個或多個產品類:工廠方法模式所創建的具體實例對象
.
2.3 實現代碼
#include <iostream>
using namespace std;
class AbstractProduct
{
public:virtual void makeProduct() = 0;
};class AbstractFactory
{
public:virtual AbstractProduct* createProduct() = 0;
};class PlaneProduct :public AbstractProduct
{
public:void makeProduct() {cout << "造飛機....." << endl;}
};
class PlaneFactory :public AbstractFactory
{
public:AbstractProduct* createProduct(){AbstractProduct* product = new PlaneProduct;return product;}
};
class RocketProduct :public AbstractProduct
{
public:void makeProduct(){cout << "造火箭...." << endl;}
};
class RocketFactory :public AbstractFactory
{
public :AbstractProduct* createProduct(){AbstractProduct* product = new RocketProduct;return product;}
};int main()
{//造飛機AbstractFactory* factory = new PlaneFactory;AbstractProduct* product = factory->createProduct();product->makeProduct();//造火箭factory = new RocketFactory;product = factory->createProduct();product->makeProduct();return 0;
}
.
2.4 優缺點
優點:
-
需求改變時改動最小
-
具體的創建實例過程與客戶端分離
缺點:
- 新增功能時,工程量稍大
.
3.抽象工廠模式
3.1 抽象工廠模式
抽象工廠模式是所有形態的工廠模式中最為抽象和最其一般性的。
抽象工廠模式可以向客戶端提供一個接口,使得客戶端在不必指定產品的具體類型的情況下,能夠創建多個產品族的產品對象。
.
3.2 實現步驟
1.提供一個抽象工廠類:聲明一組創建一族產品的工廠方法
2.提供一個具體工廠類:實現了在抽象工廠創建產品的工廠方法
3.提供一個抽象產品類:抽象產品中聲明了產品具有的業務方法
4.提供一個具體產品類:實現抽象產品接口中聲明的業務方法
.
3.3 實現代碼
#include <iostream>
using namespace std;
//抽象產品
class Product
{
public:virtual void show() = 0;
};
//抽象產品族1
class KeyBoard :public Product{};
//羅技鍵盤
class LogiKeyBoard :public KeyBoard
{void show(){cout << "羅技鍵盤......" << endl;}
};
//雷蛇鍵盤
class RazerKeyBoard :public KeyBoard
{void show() {cout << "雷蛇鍵盤......" << endl;}
};
//抽象產品族2
class Mouse :public Product {};
//羅技鼠標
class LogiMouse :public Mouse
{void show() {cout << "羅技鼠標......" << endl;}
};
class RazerMouse :public Mouse
{void show() {cout << "雷蛇鼠標......" << endl;}
};
//抽象工廠
class Factory
{
public:virtual KeyBoard* createKeyBoard() = 0;virtual Mouse* createMouse() = 0;
};
class LogiFactory :public Factory
{KeyBoard* createKeyBoard(){return new LogiKeyBoard;}Mouse* createMouse() {return new LogiMouse;}
};
class RazerFactory :public Factory
{KeyBoard* createKeyBoard() {return new RazerKeyBoard;}Mouse* createMouse() {return new RazerMouse;}
};int main()
{Factory* factory = new LogiFactory;KeyBoard* keyBoard = factory->createKeyBoard();Mouse* mouse = factory->createMouse();keyBoard->show();mouse->show();delete factory;delete keyBoard;delete mouse;factory = new RazerFactory;keyBoard = factory->createKeyBoard();mouse = factory->createMouse();keyBoard->show();mouse->show();delete factory;delete keyBoard;delete mouse;factory = NULL;keyBoard = NULL;mouse = NULL;return 0;
}
.
3.4 優缺點
優點:
-
抽象工廠封裝了變化,封裝了對象創建的具體細節
-
增加新的產品族很方便,無須修改已有系統
-
針對接口進行編程而不是針對具體進行編程
缺點:
- 增加新的產品等級結構需對原系統做較大修改(違背開放封閉)
.
聲明:資源可能存在第三方來源,若有侵權請聯系刪除!