設計模式學習之四(上) 開自己的比薩店

2021-08-25 20:33:55 字數 1164 閱讀 2985

前面說過其中之一的設計原則我們不應該依賴實現程式設計,但是當我們每次用new時不正是在依賴實現程式設計嗎

duck duck = new mallardduck();

duck duck; if(picnic) else if(hunting) else if(inbathtub)

當看到這樣的**,一旦有變化或擴充套件,就要重新開啟這段**進行修改,這違背了對修改關閉的原則,通常這樣修改過的**將造成部分系統更難維護和更新,而且更容易犯錯。那怎麼辦呢,想想前面所有的設計原則之一:封裝變化。那麼我們開始識別變化的部分吧。

假設你有個比薩店,身為比薩店得主人,你的**可能這樣寫:

pizza orderpizza()

pizza orderpizza(string type) else if(type.equals("greek")) else if(type.equals("pepperoni")) pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; }

但壓力來自於增加更多的比薩,或者某種比薩賣的不好我想從比薩店去掉,就要一再修改剛增加上的**,但是比薩的準備,烘烤,包裝多年來很少變,變的只是被製作的物件而已。既然已經看出來那些變化,那些不變化的地方,是我們封裝變化的時候了,將建立物件移到orderpizzas()之外,移到別的地方,這個地方我們稱之為工廠,但需要比薩時就向工廠要,至於比薩產生的細節我不關心,我只關心我是否能拿到比薩。我們建立乙個簡單比薩工廠:

public class ******pizzafactory else if(type.equals("pepperoni")) else if(type.equals("clam")) else if(type.equals("veggie")) return pizza; } }

是時候修改我們的客戶**了,我們所要做的是向工廠要比薩,其他不用關心:

public class pizzastore public pizza orderpizza(string type) }

上面的簡單工廠其實不是乙個設計模式,反而更像一種程式設計習慣。有些程式設計人員習慣把它誤認為是「工廠模式」。但也不要因為簡單工廠不是乙個真正的模式,就忽略他的用法,讓我們看看新的比薩店的類圖:

謝謝簡單工廠為我們暖身。接下來登場的是兩個重量級模式,他們都是工廠,你將會看到更多的比薩。

設計模式學習筆記之四 外觀模式

外觀模式 facade 為子系統中的一組介面提供乙個一致的介面,此模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。以上的定義摘自 大話設計模式 按我自己的理解,外觀模式 將乙個或多個類中的多個方法打包到乙個方法中供外界呼叫。打個比方,現有a類的a方法 b類的b方法 c類的c方法,我們的業...

設計模式之美學習 設計原則之單一職責 四

一種理解是 把模組看作比類更加抽象的概念,類也可以看作模組。另一種理解是 把模組看作比類更加粗粒度的 塊,模組中包含多個類,多個類組成乙個模組。乙個類只負責完成乙個職責或者功能。也就是說,不要設計大而全的類,要設計粒度小 功能單一的類。換個角度來講就是,乙個類包含了兩個或者兩個以上業務不相干的功能,...

js設計模式之策略模式的學習

策略模式 定義一系列的演算法,把他們乙個個封裝起來,並且使他們可以相互替換。基礎實現 var performances function performances.prototype.calculate function salary var performancea function perfor...