簡單工廠模式和工廠模式

2021-06-21 11:02:49 字數 2307 閱讀 6657

在對比兩種模式之前,首先需要學習  開放-封閉原則。在以前學習的過程中,聽說過很多次,編寫程式要遵循開閉原則。

在做專案的過程中,因為需求的新增,經常會更新軟體。更新軟體,就要設計到修改**了。在物件導向的程式設計中,經常會寫類。如果因為新增需求,去修改已經完成的類。那麼他是不符合開閉原則的。

新增需求,應該讓**去擴充套件,而不是去修改。通過抽象類和繼承來實現開閉原則。

開閉原則:對於擴充套件是開放的,對於更改是封閉的。

使用開閉原則,可以給物件導向的程式設計帶來巨大的好處,使得**可維護、可擴充套件、可復用、靈活性好。

首先來看一下簡單工廠模式:

實現的**:

public class operation               //定義操作類

set

}public double numberb //第二個運算元

set

}public virtual double getresult() //返回執行結果

}public class operationadd : operation //加法類,繼承操作類

}public class operationsub : operation //減法類,繼承操作類

}public class operationmul : operation //乘法類,繼承操作類

}public class operationdiv : operation //除法類,繼承操作類

}public class operationfactory //建立簡單工廠

return oper;}}

通過上面的例子,你會發現,在簡單工廠模式中,如果要增加需求,必須修改的類有

operationfactory

,每次增加需求都需要修改工廠,這樣是既對擴充套件開放,又對修改也開放了。這就就違背了開-

閉原則。

在簡單工廠裡面,不需要管改用哪個類的例項,只需要把

'+'給工廠,工廠自動就給出了相應的實力。客戶端只需要去做運算就可以了。根據不同的例項去實現不同的運算,擴充套件需要修改工廠中的

case

語句。所以違背了開閉原則。

對於工廠模式,根據不同的例項,來對應不同的工廠。對修改進行封閉。如果需要擴充套件,只需要增加相應的工廠類即可。這樣就不需要修改原有的工廠了。

在來看一下工廠模式:

實現的**:

class program

}public class operation //定義操作類

set

}public double numberb //第二個運算元

set

}public virtual double getresult() //得到執行結果

}public class operationadd : operation //加法類,繼承操作類

}public class operationsub : operation //減法類,繼承操作類

}public class operationmul : operation //乘法類,繼承操作類

}public class operationdiv : operation //除法類,繼承操作類

}inte***ce ifactory //建立乙個工廠介面

class addfactory : ifactory //加法類工廠

}class subfactory : ifactory //減法類工廠

}class mulfactory : ifactory //乘法類工廠

}class divfactory : ifactory //除法類工廠

}

對比兩種設計模式,工廠模式是在簡單工廠模式上稍作改進得到的,更優於簡單工廠模式,使得**可維護、可擴充套件、可復用、靈活性好。

簡單工廠和工廠模式

工廠模式 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。factory method使乙個類的例項化延遲到其子類。適用性當乙個類不知道它所必須建立的物件的類的時候。當乙個類希望由它的子類來指定它所建立的物件的時候。當類將建立物件的職責委託給多個幫助子類中的某乙個,並且你希望將哪乙個幫助子類是...

簡單工廠和工廠模式

設計模式泛泛談 想要實現依賴倒轉規則,工廠方法不是唯一的技巧。工廠模式或者抽象工廠應該是重構時使用的。怎麼感覺有點 fp 中的高階函式的味道!簡單工廠和工廠模式的區別 區別其實不大。但是工廠模式能對修改閉合,以前的 保證不會出問題。不會出現新增的功能測試沒問題,已有的功能莫名其妙就掛掉的情況。所以真...

簡單工廠模式和工廠模式見解

簡單工廠模式是23種設計模式的一種,給人最直觀的感受就是我可以根據我輸入的資料建立不同的物件,但是這個物件必須實現相同的方法。那我們可不可以理解成就是乙個物件裡面我重寫了若干個方法,這個方法除了方法體不一樣其他都一樣,貌似這樣理解也沒錯,只是簡單工廠模式將其具體化了。public inte ce o...