Free Talk 設計模式 之一

2021-06-16 01:25:38 字數 1248 閱讀 9782

早就在看設計模式了,一直很零散。這次alex組織設計模式系列freetalk真是大好的機會,正好系統學習一下,好好學習,天天向上^_^。       也沒有筆記,講的時候蠻有感覺的,把自己的理解趕快寫下來,以後也好有地方查。

第一課是抽象方法,或者抽象工廠方法? 大概是這個名字吧。

乙個簡單的例子是人吃奶粉的例子

class 奶粉

class 嬰兒奶粉:奶粉

class 老人奶粉:奶粉

class  人

}在使用設計模式之前我們要這麼寫**:

class 嬰兒:人

}class 老人:人

}這裡 人 的子類 都要覆蓋父類的 吃奶粉() 方法,而之所以修改,只是因為奶粉型別不一樣。這樣的修改會使  吃奶粉() 方法 中其他的邏輯 遭遇危險,導致不穩定。 

抽象方法 模式就是要把這種不穩定的邏輯隔離開來 ,把建立不同型別奶粉的** 隔離出來。 

看看例子。

奶粉的類不改動,我們來改動人這個類。

class  人

public

virtual

void 吃奶粉

}嬰兒的類可以這麼寫:

class 嬰兒:人

}老人 類可以這麼寫 

class 老人:人

}好了,就是最簡單的工廠方法了。

再看另一種實現:

或許每種人的子類都要 重寫 create奶粉() 太麻煩吧,有時候 可以這樣寫:

奶粉的類保持不變,修改人的類:

class  人

public

virtual

void 吃奶粉 //這個方法不變

}這樣,嬰兒類和老人類就不需要覆蓋create奶粉()方法了,是不是 很省事了,可這種方法有很大的侷限性,就是 人這個類 必須 知道它所擁有的哪些子類。遇到新的型別就麻煩了.

再看另一種實現方法:

上面的兩種方法都涉及到子類要覆蓋 人類中的方法(create奶粉() 方法 或者 吃奶粉()方法). 奶粉的種類變化,需要修改食用者的內容, 給食用者帶來不必要的麻煩. 我們來一種更加徹底的隔離.

奶粉的類不變.

新增乙個工廠類(factory)

class  奶粉factory()

}人類 修改如下:

class  人

}這下好了,從此以後再不用修改人這個類和它的子類了。而且可以保證,每一種不同的人都能吃到相應的奶粉了。

如果有新的人或需要新的奶粉時只需要在 奶粉factory的 create奶粉() 方法中新增即可。

設計模式之一(Iterator模式)

表 1 1 類和介面的一覽表 名字說明 aggregate 表示集合的介面 iterator 遍歷集合的介面 book 表示書的類 bookshelf 表示書架的類 bookshelfiterator 遍歷書架的類 main 測試程式行為的類 aggregate介面 public inte ce a...

java設計模式之一 模板模式

一句話 邏輯相同,具體實現不同 1.使用場景 a.多個子類有公用的方法,並且邏輯基本相同 b.重構,相同的 抽取到父類 2.優點 a.不變的演算法封裝到父類,變的部分放在子類,擴充套件方便 b.提取公共部分,便於維護 c.具體邏輯由父類實現,子類實現具體方法 3.缺點 a.子類的行為對父類產生影響,...

設計模式之一單例模式

單例模式就是類別只有乙個例項,每次在必得類呼叫這個類的例項,都是同乙個例項。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。如印表機 顯示卡等等這些系統資源。如果做andr...