面向對象&設計模式

1、面向對象&設計模式概述

  • 面向對象解決的是復用性和可擴展性,設計模式是運行面向對象分析方法總結出來的一套經驗,常說的"找到變化、封裝變化"就指的是可擴展性。
  • 軟體設計總的原則是:開閉原則、面向介面編程(依賴於抽象,不依賴於具體實現),當然還有其它的原則,只要滿足這兩點,基本就ok。

2、面向對象要點總結

  • 繼承是為了重用和擴展功能,子類可以覆蓋父類里的方法,體現了開閉原則中的開
  • 介面是一種標準,它主要用於擴展新類,體現了開閉原則中的開
  • 繼承和介面都是is-a的關係,表示xx是一種x
  • 抽象類可以實現介面,它的作用有兩點:
    • 可以實現部分介面方法,裡面可以沒有抽象方法(實現介面方法),子類又可以實現介面方法(重載)
    • 實現介面同時又具有介面的引用,是為對象增加功能
  • 對象之間要區分關係:繼承、實現、引用(組合)關係,通過組合可以減少類爆炸,分析有哪些對象,再看對象間的關係,注意是同一層的關係還是上下層的關係。

3、最基礎的設計模式(模板&策略)

  • 模板設計模式:固定演算法步驟,延遲到子類中實現
  • 策略設計模式:演算法策略可以替換

一個是用繼承(模板),一個是用組合(策略)。其實策略模式是一種經典的模式,對介面引用可以擴展多個策略實現(組合+介面)。

4、有點意思的結構模式之裝飾模式

結構模式中最有意思的是裝飾模式,它是為對象動態地增加附屬功能,來分析分析這個設計模式。

從需求上看,至少有兩個對象:一個是被裝飾對象,另一個是裝飾對象。增加功能馬上想到要用繼承來做,簡單來說如果用繼承來做,會產生類爆炸!我們不能對具體的對象繼承,要產生一個與具體對象相同地位的類出來, 這個可以通過抽象類+實現介面+引用介面來實現,所以這個時候整個類圖就比較好理解了。大家可以細細體會下。

5、有點意思的行為模式之命令模式

行為模式中比較有意思的模式是命令模式,簡單理解是誰下了一個命令讓另外一個人來做。

從需求上看,至少有三個對象:一個是命令,一個是下命令的對象,最後一個是執行命令的人。然後來分析它們的依賴關係。

下命令的人是持有命令的,每個命令都會關聯到具體的接收者來執行的,大家可以畫一畫類圖。

6、事件模式

發生了某個具體的事件就會執行一段特定的邏輯,如單擊滑鼠右鍵會彈出菜單。從這個例子中可以分析出事件模式有三個對象:事件(單擊)、事件源(滑鼠)、事件監聽器(彈出菜單)。事件監聽器向事件源註冊,同時事件源提供fire 事件的介面(傳遞事件),這個大家也可以畫一畫類圖。

7、總結

自己學習面向對象和設計模式的感想是一定要對常用的模式進行分析,有哪些對象、對象之間的關係是怎樣的,要知道每個類圖為什麼要那麼畫,其次學習抽象類和介面的用法,比如介面繼承介面、抽象類實現介面,通過例子加深理解,上面的要點總結就是自己所思、所想,希望文章對大家有所幫助,也歡迎各位交流溝通,個人微信手機號:13512717641。


推薦閱讀:

類的設計原則
面向新手的雜談:Flyweight(續)
設計模式之「Decorator」註疏#02
單例模式小結

TAG:面向對象分析與設計 | 設計模式 |