設計模式 工廠方法模式

2021-10-01 20:03:32 字數 2956 閱讀 6362

之前寫了

設計模式系列目錄

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

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

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

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

1

#region 工廠模式23

//產品

4public

abstract

class

product58

9//建造者10

//工廠方法是建立乙個框架,讓子類決定要如何實現具體的產品

11public

abstract

class

creator

1219

//讓子類去實現要生產什麼產品

20public

abstract product createproduct(string

f_type);

2122}23

#region 產品

24public

class

oneproduct : product

2530}31

32public

class

twoproduct : product

3338}39

40public

class

firstproduct : product

4146}47

48public

class

secondproduct : product

4954}55

#endregion

56//

第乙個建造工廠

57public

class

onecreator : creator

5868

69return

null;70

}71}72

//第二個建造工廠

73public

class

twocreator : creator

7484

return

null;85

}86}87

8889

90#endregion

1

static

void main(string

args)

2

讓我們來看一下依賴關係

我們會看到 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

;

view code

#include "

stdafx.h

"#include

"product.h

"product::product()

product::~product()

//one product

oneproduct::oneproduct()

oneproduct::~oneproduct()

//twoproduct

twoproduct::twoproduct()

twoproduct::~twoproduct()

view code

#pragma once#include 

#include

class

product;

class

creator

;class onecreator : public

creator

;

view code

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

)) }

view code 呼叫

#include #include 

"product.h

"#include

"creator.h

"int

main()

view code

設計模式 工廠方法模式

一 工廠方法 factory method 模式 工廠方法模式的意義是定義乙個建立產品物件的工廠介面,將實際建立工作推遲到工廠子類當中。核心工廠類不再負責產品的建立,這樣核心類成為乙個抽象工廠角色,僅負責具體工廠子類必須實現的介面,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角...

設計模式 工廠方法模式

1 factorymethod.h ifndef factorymethod h define factorymethod h include include using namespace std class osproduct 產品,product,產品的抽象類 class windowspro...

設計模式 工廠方法模式

框架的基礎知識 對框架的理解 框架和設計模式的關係 工廠方法模式 定義 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,factory method使乙個類的例項化延遲到其子類。結構 產品 public inte ce product 具體產品 public class productimpl...