今天說一下工廠方法模式:
定義了乙個建立物件的介面,但由子類決定要例項化的類是哪乙個。工廠方法讓類把例項化推遲到子類
所謂的決定並不是批模式允許子類本身在執行時做決定,而是指在編寫建立者類時,不需知道建立的產品是哪一下,選擇了使用
哪個子類,就決定了實際建立的產品是什麼。
#region 工廠模式
// 產品
public abstract class product
// 建造者
//工廠方法是建立乙個框架,讓子類決定要如何實現具體的產品
public abstract class creator
//讓子類去實現要生產什麼產品
public abstract product createproduct(string f_type);
}#region 產品
public class oneproduct : product
}public class twoproduct : product
}public class firstproduct : product
}public class secondproduct : product
}#endregion
//第乙個建造工廠
public class onecreator : creator
return null;}}
//第二個建造工廠
讓我們來看一下依賴關係
我們會看到 creator 和所有的產品(oneproduct、twoproduct...)都依賴了product.這是依賴倒置原則:要依賴抽象,不要依賴具體類
也就是說不能讓具體產品去依賴creator,不管是產品還是creator都應該依賴於抽象
就用這個原則我們要盡量做到
1變數不可以持有具體類的引用(如果使用new就會有具體類的引用。你可以改用工廠來避開這樣的做法)
2不要讓類派生自具體類(派生自乙個介面)
3不要覆蓋基類中已實現的方法
但在實際程式設計時不可能完全遵守這幾條,我們只要盡量做就可以了
c++**
product
#pragma once
#include #include using namespace std;
class product
protected:
string m_rodutname;
};class oneproduct : public product
;class twoproduct : public product
;
#include "stdafx.h"
#include "product.h"
product::product()
product::~product()
// one product
oneproduct::oneproduct()
oneproduct::~oneproduct()
// twoproduct
twoproduct::twoproduct()
twoproduct::~twoproduct()
#pragma once
#include #include class product;
class creator
;class onecreator : public creator
;
#include "stdafx.h"
#include "creator.h"
#include "product.h"
creator::creator()
product* creator::factorymehtod(const std::string& type)
creator::~creator()
product* onecreator::createproduct(const std::string& type)
else if (type.compare("two"))
}
呼叫
#include #include "product.h"
#include "creator.h"
int main()
工廠方法模式 工廠方法模式
工廠方法模式是簡單工廠模式的公升級版,簡單工廠模式不符合設計模式的原則 即 單一職責,開閉原則 優點 職責明確,擴充套件方便 缺點 需要建立多個工廠 實現步驟 1.將工廠通用方法抽取介面 例如 ifactory 2.將產品抽取介面 例如 icar 3.實現各種產品 例如 baomacar,benti...
工廠方法模式 工廠方法模式 二
工廠方法模式是對簡單工廠的進一步抽象和封裝,需要新的類物件時不需要對既有工廠類進行修改,而是增加新的工廠類。工程類可以使用模版進一步封裝,由編譯器來生成 從而減少 編寫工作量。工廠方法的 c 實現01part產品抽象基類class animal virtual void show 0 02part產...
工廠方法模式(一) 簡單工廠方法模式
ps 第二篇學習部落格,堅持就是勝利。繼續設計模式的學習,記錄工廠模式,加深自己的理解。基本結構 abstractproduct 用來定義基本的商品的抽象 public abstract class abstractphoneproduct 用來實現抽象商品,生成各種商品 public class ...