c 之簡單工廠模式

2022-08-28 20:51:13 字數 3790 閱讀 1312

簡單工廠模式

概念:這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳的方式,我們在建立物件時不會暴露建立邏輯,並且是通過使用乙個共同的介面來指向新建立的物件。

意圖:定義乙個建立物件的介面,讓其子類自己決定例項化哪乙個工廠類,工廠模式使其建立過程延遲到子類進行。

主要解決的問題:主要解決介面選擇的問題。

何時使用:我們明確的計畫不同條件下建立不同的例項的時候。

如何解決:讓子類去實現工廠介面,返回乙個抽象的父類。

一:那麼我們先來看乙個例子:我們如何實現乙個簡單的計算器的功能呢??首先我們先來看運算類,**如下:

///

///運算類

/// public

class

operation

return

result;

}}

客戶端**如下:

class

program

", strresult);

console.readkey();

}catch

(exception ex)

}}

這時候我們需要考慮乙個問題:假如在我在增加乙個開根運算,那麼我們如何修改呢??問題是:我們要加乙個開根的運算,需要讓加減乘除都參與進來進行編譯。比如我們來打乙個比方:如果現在公司要求你為公司的薪資管理系統進行維護,原來只有技術人員,市場的銷售人員,經理,這個時候我們現在在加入乙個兼職工作人員的工資,按照我們現在的這種寫法,公司就得需要把包含前三種的運算類的編碼都給你,這樣的話是不是顯得有點不合適呢。

在這個時候我們可不可以這樣做:我們應該把加減乘除類全部都分離開來,我們修改其中的乙個,都不會影響到其他的運算類。

這個時候物件導向的思想就顯得尤為重要了:我們可以使用封裝 繼承 多型可以把程式的耦合度降低,並且使用設計模式使得程式更加的靈活,容易修改,並且易於復用,我們總結的四個物件導向的好處是:(1)可維護 (2) 可復用  (3)可擴充套件 (4)靈活性好。

這時候我們考慮應該如何做呢?

既然我們決定把加減乘除都分離開來都寫成乙個單獨的類來進行儲存。我們需要考慮他們這四個類中都需要什麼(或者有什麼共同的東西)。

1.他們四個類都需要有兩個數字(numbera和numberb)。

2.他們都需要乙個得到計算之後的結果。

這樣的話我們可以宣告乙個抽象的父類已供子類繼承使用,詳細**如下:

///

///抽象方法

/// public

abstract

class

calfather

set }

//數字二

private

double

_numbertwo;

//屬性的設定用來保護字段

public

double

numbertwo

set }

//抽象的方法

public

abstract

double

getresult();

//////

父類自己的建構函式,進行傳值使用。

/// ///

第乙個數字

///第二個數字

public calfather(double n1, double

n2)

}

這樣的話我們就可以在子類中重寫父類的抽象的方法了。詳細**如下:

///

///加法

/// public

class

jia : calfather

//////

方法的重寫

/// ///

總和 public

override

double

getresult()

}//////

減法

/// public

class

jian : calfather

//////

方法的重寫

/// ///

總和 public

override

double

getresult()

}//////

乘法

/// public

class

cheng : calfather

//////

方法的重寫

/// ///

總和 public

override

double

getresult()

}//////

除法

/// public

class

chu : calfather

//////

方法的重寫

/// ///

總和 public

override

double

getresult()

}

當編寫完上面的**之後,我們該考慮如何的例項化物件的問題了。這時候我們的「簡單工廠模式」就派上用場了。

簡單工廠的最主要的一點是:返回父類。

為什們要返回父類呢?這裡用到了裡式轉換的思想。

(1):子類可以賦值給父類。

(2):如果父類中裝的是子類物件,那麼可以將這個父類強轉為子類物件。

**如下:

///

///簡單工廠的核心

/// ///

輸入的運算子

///第乙個數字

///第二個數字

///進行父類的重寫的方法

public

static calfather getcal(string opera, int n1, int

n2)

return

cal;

}}

這樣的話我們在增加各種複雜的運算,比如平方根,立方根,這個時候我們只需要新增相應的子類在繼承父類就可以了,在修改共產新增分支就行了。而我們之前實現的**沒有進行任何的修改。這也體現了物件導向的好處。

簡單工廠模式的優缺點:

雖然上面已經介紹了簡單工廠模式的缺點,下面還是總結下簡單工廠模式的缺點:

了解了簡單工廠模式之後的優缺點之後,我們之後就可以知道簡單工廠的應用場景了:

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

專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。它又稱為靜態工廠方法模式,屬於類的建立型模式。簡單工廠模式的uml類圖 簡單工廠模式的實質是由乙個工廠類根據傳入的引數,動態決定應該建立哪乙個產品類 這些產品類繼承自乙個父類或介面 的例項。該模式中包含的角色及其職責 工廠 cr...

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

設計模式的作用就是不同作用的 的區分管理,每乙個區塊的 只做好自己的事情。拿人體來舉例,大腦是所用活動的控制中樞。分別控制軀體,消化系統,免疫系統,神經系統等。那麼首先就需要將各個系統分割開來,在需要運動的時候通知軀體運動,需要消化的時候通知消化系統去消化 等等。再往細分,大腦給軀體發出乙個喝水的命...

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

簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端 使用工廠類 的選擇條件動態例項化相關的類,根據客戶端的選擇條件動態例項化相關的類,對於客戶端來說,去除了與具體產品的依賴。對於動態例項化,我們可以借助智慧型指標來完成對物件的管理。如下 include include using n...