設計模式 簡單工廠模式

2021-09-07 12:28:56 字數 3281 閱讀 2895

近期又在看程杰的《大話設計模式》這本書,這真的是我超級喜歡的一本書。裡面的內容非常精彩。學習之餘。將書中的內容整理出來,另外加上了一些自己的理解,方便日後自己回想並同一時候希望本筆記能夠對各位程式設計者有所幫助,相關技術上博主理解如有偏頗,還請指正。

簡單工廠模式是專案開發中最經常使用也是最重要的一種設計模式。差點兒在全部的專案開發中都會用到。

可能你還不知道簡單工廠模式是什麼,但或許這樣的設計思想你早就在實際專案開發中接觸過了。

接下來就來看看簡單工廠模式究竟是什麼。

首先大家想乙個問題。假設叫你實現乙個計算器控制台程式。要求輸入兩個數和運算符號,得到運算結果。你會怎麼做?

0基礎版本號:

class program  

console.writeline("結果是:" + strresult);

console.readline();

} catch (exception ex)

} }

能寫出以上**已經不錯了。至少已經實現了眼下的計算器功能。

可是這個**是面向過程而非物件導向的,僅僅能滿足當前的需求。程式不easy擴充套件和復用和維護。

試想。假如我如今又讓你寫乙個windows的計算器,你在原來的**上能改嗎?顯然,你還須要再又一次寫乙個程式。可是windows計算器和控制台計算器僅僅是在顯示上不同,業務的邏輯處理是同樣的。

所以說你之前面向過程的程式是有弊端的:非常難進行二次開發!

所以,接下來的改進之處就是利用物件導向的封裝特性,將業務邏輯與介面邏輯分開。使其耦合度下降,達到復用的目的;

公升級版本號:

介面邏輯部分:

class program  

catch (exception ex)

} }

業務邏輯部分:

public class operation  

return result;

} }

以上版本號**,把業務和介面分離,假設此時再讓寫乙個windows應用程式的計算器。就能夠復用operation運算類了,並且不單是windows版,web版、手機版、pad版都能夠復用。

接下來,假如我如今希望再新增乙個開根(sqrt)運算,要怎麼改?你可能會想,直接在operation裡加入乙個分支運算就好了。

但實際專案開發中。業務邏輯通常都會非常複雜。要做非常多的事。不僅僅是做個加減法這麼簡單。所以,我們應該保證改動某一種型別業務而不會影響其它的。比方在這裡,我們應該將加減乘除等運算分離。改動當中乙個而不影響另外幾個,新增運算**也不影響其它**。這體現了物件導向的繼承和多型特性。

高階版本號:

/// /// 運算類  

///

class operation

set

} /// /// 數字b

///

public double numberb

set

} /// /// 得到運算結果

///

///

public virtual double getresult()

}

///summary

/// 加法類

///

class operationadd : operation

}

/// /// 減法類  

///

class operationsub : operation

}

/// /// 乘法類  

///

class operationmul : operation

}

/// /// 乘法類  

///

class operationmul : operation

}

以上。首先是乙個運算類,它有兩個number屬性和乙個虛方法getresult(),加減乘除都是運算類的子類,繼承了它並重寫了getresult()方法,這樣。改動某乙個運算就不會影響其它的運算了。

那麼,怎樣讓計算器知道我們須要用哪乙個方法呢?如今的問題事實上就是怎樣去例項化物件,我們用乙個單獨的類來做這個創造例項的過程,這就是工廠類。

/// /// 運算類工廠  

///

class operationfactory

case "-":

case "*":

case "/":

} return oper;

} }

這樣,僅僅要輸入運算符號。工廠就例項化出合適的物件,通過多型,返回父類的方法實現了計算器結果,這樣的方法就是簡單工廠模式。

operation oper;  

oper = operationfactory.createoperate("+");

oper.numbera = 1;

oper.numberb = 2;

double result = oper.getresult();

簡單工廠模式包括下面角色和職責:

工廠(creator):簡單工廠模式的核心,它負責實現建立全部例項的內部邏輯。工廠類的建立產品類的方法能夠被外界直接呼叫。建立所需的產品物件。

抽象產品(product):簡單工廠模式所建立的全部物件的父類。它負責描寫敘述全部例項所共同擁有的公共介面。

詳細產品(concrete product):是簡單工廠模式的建立目標。全部建立的物件都是充當這個角色的某個詳細類的例項。

最後我們再總結一下簡單工廠模式的特性

1.產品業務邏輯與介面邏輯分開;

2.將產品細分,不同種類的產品子類都有乙個共同的抽象父類,重寫了父類的方法,各種產品互不干涉,改動某乙個不會影響其它,並實現可可擴充套件;

3.新增乙個工廠類factory,該類負責依據條件選擇例項化哪一種產品,並創造例項。

4.假設須要新增運算。一方面須要新增產品子類,還有一方面須要改動工廠類。

設計模式 工廠模式(簡單工廠)

一 簡單工廠 定義 簡單工廠模式 factory pattern 屬於類的創新型模式,又叫靜態工廠方法模式 static factorymethod pattern 是通過專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。特點 工廠類直接實現,乙個產品介面,乙個工廠類可以產生多...

設計模式(簡單工廠模式 工廠模式 抽象工廠模式)

當邏輯較為簡單時,可以直接建立對應的類。如下 include using namespace std class class banana class pear intmain 通過此 可以發現,使用者直接與客戶接觸,違背了dip 依賴倒轉 原則,過於麻煩,所以引出簡單工廠模式。include us...

設計模式 簡單工廠設計模式

請用任意一種物件導向語言實現計算器控制台程式,要求輸入兩個數和運算符號,得到結果。operation運算類 public class operation set public double numberb set public virtual double getresult 加減乘除類 using...