最近在看設計模式,結合這三年的工作經驗,這次看了設計模式之後有種豁然開郞的感覺,印象非常深刻,並且在腦海中呈現用與不用的明顯不同之處。
工廠模式屬於建立型模式,大致可以分為三類:簡單工廠模式、工廠方法模式、抽象工廠模式。首先來介紹第一種,簡單工廠模式,舉個事例:圖形
資料庫中有個存放圖形的容器,當然建立圖形的地方的有很多,這時就可以用簡單工廠模式了。先上uml圖:
//圖形型別
enum emshapetype
;//圖形基類
class cshape
~cshape(void){}
};//直線
class cline : public cshape
~cline(void){}
};//圓
class ccircle : public cshape
~ccircle(void){}
};//矩形
class crectangle : public cshape
~crectangle(void){}
};
#pragma once
#include "shape.h"
//工廠類
class cfactory
~cfactory(void){}
public:
//根據型別來建立圖形
//在實際應用中我更喜歡用靜態函式
static cshape* createshape(emshapetype emtype) }
};
#include #include "factory.h"
#include "database.h"
using namespace std;
void main()
從應用的角度來看,用與不用工廠的優缺點一目了然,用工廠的優點:1、不會管具體的子類,只對有原型(基類)操作。2、減少錯誤概率的發生,即使有錯也是一改全改。例如現在專案經理要求只要是有指標的地方都要加個空指標判斷。
當然,簡單工廠模式也有它的缺點,它違反了開放封閉原則:軟體實體(類、模組、函式)可以擴充套件,但是不可修改。於是,工廠方法模式出現了。所謂工廠方法模式,是指定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。factory method使乙個類的例項化延遲到其子類。uml圖:
**如下:
//類工廠基類
class cfactorybase
~cfactorybase(){}
public:
virtual cshape* createshape() = 0 ;
};//線類工廠基地
class clinefactory : public cfactorybase
};//圓類工廠基地
class ccirlcefactory : public cfactorybase
~ccirlcefactory(){}
public:
virtual cshape* createshape() };
//矩形類工廠基地
class crectfactory : public cfactorybase
~crectfactory(){}
public:
virtual cshape* createshape()
};
#include #include "factory.h"
#include "database.h"
using namespace std;
void main()
從應用的角度來看個人感覺沒有簡單工廠模式直觀,當圖形的種類越來越多時工廠類也會增多。還有乙個抽象工廠模式,我不打算在這裡貼出相關**,它與工廠模式很像,只不過在類工廠基類中新增類似於virtual cshape* createshape() = 0 一樣的語句而已。 設計模式C 實現(1) 工廠模式
軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...
設計模式C 實現(1) 工廠模式
軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...
設計模式C 實現(1) 工廠模式
軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...