工廠方法模式

2021-07-12 07:42:23 字數 2621 閱讀 4621

今天說一下工廠方法模式:

定義了乙個建立物件的介面,但由子類決定要例項化的類是哪乙個。工廠方法讓類把例項化推遲到子類

所謂的決定並不是批模式允許子類本身在執行時做決定,而是指在編寫建立者類時,不需知道建立的產品是哪一下,選擇了使用

哪個子類,就決定了實際建立的產品是什麼。

#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 ...