日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

c++设计模式之简单工厂模式

發布時間:2025/7/14 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++设计模式之简单工厂模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

模擬場景

要求使用簡單工廠模式設計一個可以創建不同幾何形狀(如矩形、圓形、三角形)的繪圖工具,每個幾何圖形都具有繪制Draw()和擦除Erase()兩個方法;

UML類圖

分析需求:

首先這個繪圖工具要求可以提供一系列的幾何圖形繪制,包括矩形、圓形、橢圓形、三角形,這些圖形對象要求都具備繪制Draw()和Erase()方法;因此,我們可以定義一個抽象基類CGraph,具有Draw()和Erase()的純虛方法;因為不同的圖形類型,它們的Draw()和Erase()具體實現和需要的參數是不同的,這里以實現三角形和正方形為例進行說明。

CTriangle類描述三角形類信息,CSquare類描述正方形類信息,CGraphFactory類負責創建不同的幾何對象,它由GreateGraph函數根據不同的參數,選擇性的實例化幾何對象。通過CGraphFactory類工廠用戶可以不關心具體對象是如何創建的,只需要告訴類工廠,需要創建什么類型的幾何圖形即可,UML類圖如下。

下面給出簡單工廠的定義:

簡單工廠模式(Simple Factory Pattern):定義一個工廠類,它可以根據參數的不同返回不同類的實例,被創建的實例通常都具有共同的父類;因為創建實例的類方式是靜態方法,又被稱為靜態工廠方法(Static Factory Method)模式,它屬于類創建型模式。

具體代碼

主體代碼

#include "stdafx.h" using namespace std; typedef enum {EN_DRAW_SQUARE = 0,EN_DRAW_TRIANGLE, }ENUM_DRAW_TYPE;#define SAFE_DELETE_PTR(p) if ((p) != NULL)\ { \delete p;\p = NULL;\ } //圖形基類 class CGraph { public:CGraph(){}virtual ~CGraph(){} public:virtual void Draw() = 0;virtual void Erase() = 0; }; //正方形 class CSquare:public CGraph { public:CSquare():m_width(10){ cout << "完成正方形對象創建" << endl;}~CSquare(){} public:virtual void Draw(){cout << "繪制正方形" << endl;}virtual void Erase(){cout << "清除繪正方形" << endl;} private:int m_width;//正方形的獨有參數 };//三角形 class CTriangle:public CGraph { public:CTriangle():m_bottom(10),m_high(12){cout << "完成三角形對象創建" << endl;}~CTriangle(){} public:virtual void Draw(){cout << "繪制三角形" <<endl;}virtual void Erase(){cout << "清除三角形" << endl;}private:int m_bottom; //底int m_high; //高 };//圖形創建工廠 class CGraphFactory { public://根據參數創建不同的對象static CGraph * CreateGraph(ENUM_DRAW_TYPE type){CGraph * pGraph = NULL;switch(type){case EN_DRAW_SQUARE:{pGraph = new CSquare();break;}case EN_DRAW_TRIANGLE:{pGraph = new CTriangle();break;}default:break;}return pGraph;} };

客戶端代碼

//簡單工廠方法CGraph *pGraph = NULL;cout <<"請求創建三角形:"<< endl;pGraph = CGraphFactory::CreateGraph(EN_DRAW_TRIANGLE);if (pGraph != NULL){pGraph->Draw();pGraph->Erase();SAFE_DELETE_PTR(pGraph);}cout << endl <<"請求創建正方形:"<< endl;pGraph = CGraphFactory::CreateGraph(EN_DRAW_SQUARE);if (pGraph != NULL){pGraph->Draw();pGraph->Erase();SAFE_DELETE_PTR(pGraph);}

運行結果

簡單工廠模式總結

優點:

通過工廠類用戶不需要關心類對象的具體創建過程,使得對象的創建和使用分離,屏蔽了對象創建和初始化過程,方面用戶使用;

不足:

主要的不足從以下方面展開:
1. 工廠類負責一系列對象的創建,工廠類職責不單一;若處理不當,影響面比較大。
2. 如果每個類創建過程中需要涉及復雜的初始化和相關準備,會造成工廠類邏輯復雜,不利于擴展和維護。
3. 若需要新增其他對象創建,需要修改靜態函數的分支判斷,違背了“開放擴展,關閉修改”的原則。

適用場合:

  • 工廠類負責創建的對象比較少,由于創建的對象較少,不會造成工廠方法中的業務邏輯太過復雜。
  • 客戶端只知道傳入工廠類的參數,對于如何創建對象并不關心。
  • 參考資料:
    http://blog.csdn.net/LoveLion/article/details/9300731

    轉載于:https://www.cnblogs.com/jinxiang1224/p/8468220.html

    總結

    以上是生活随笔為你收集整理的c++设计模式之简单工厂模式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。