1. 程式人生 > >設計模式中的7種設計原則

設計模式中的7種設計原則

前言

最近準備好好回顧一下設計模式的知識,提高一下自己的程式碼質量,然後做個筆記。記錄一下。

1、定義

程式碼設計的經驗總結

2、作用

  • 減少重複工作、提高程式碼複用率
  • 提高程式碼的可維護性、可擴充套件性
  • 程式碼更加優雅、更容易使人理解

3、高內聚低耦合

  • 內聚性:模組內各個元素之間相互結合的緊密程度的度量,內聚性越強,獨立性越高。通俗的來講,一個人眼疾手快,身體各個部位配合十分到位,這是咱們所期望的。
  • 耦合性:模組間關聯程度的度量,也就是說模組之間的各種關係,耦合性越強,獨立性越差。通俗的來講,你我都是當官的,咱倆之間儘量少有太密切的聯絡,不然誰出事了(模組被修改),另一個也會被連累。

4、類之間的關係:

  • 關聯關係:其實就是咱倆有關係,比如說:一個Activity中聲明瞭一個TextView,那麼他倆指定是關聯關係咯。關聯關係還分好多種:雙向關聯、單向關聯、自關聯、多重性關聯、聚合關係、組合關係。
  • 聚合關係:汽車和發動機的關係,發動機是汽車的一部分,但是我也可以獨自存在,UML圖中用空心稜形來表示,一般通過構造方法或者set方法傳參的方法注入到整體物件中。
  • 組合關係:頭和嘴的關係,頭沒了,嘴也就沒了。整體物件控制著成員物件的生命週期,UML圖中用實心稜形來表示,一般直接通過在構造方法中new一個例項來注入到整體物件中。
  • 依賴關係:是一種使用關係,一般通過方法中的引數傳入另一個類的物件,比如說Driver類和Car類,void drive(Car car),駕駛依賴汽車,那麼Driver類就依賴Car類,在UMl中是依賴類用一個虛線的箭頭指向被依賴的類。
  • 泛化關係:那麼就是一個繼承的關係,很好理解,在UML中子類用一個空心三角形來指向父類。
  • 實現關係:那麼就是一個實現介面的關係,也很好理解,在UML中實現介面的類用一個虛線的空心三角形來指向介面。

5、七大設計原則

  • 單一職責:一個類只負責一個功能中的相應職責,這個類應該只有一個引起它變化的原因。通俗的來講,一個老師最好只教一種科目,不要又教語文又教數學又教英語(一個類不能太“累”)。一個修理工,如果把各種工具,扳子,改錐,鉗子等等工具都帶在身上,是不是太累了(一個類不能太“累”),那麼如果想要更換扳子,鉗子的型號,那麼還得從身上都拿下來換一下(擁有不止一個讓他變化的原因),那麼其他的修理工也想用扳子和鉗子,但是又不能複用,只能自己再買一個新的帶身上,結果每個修理工身上都帶有一套工具(重複程式碼),如果每個修理工都用這些工具,那麼沒必要沒人都帶工具,把工具放到一個工具箱(拆分成單一的類),誰用的時候取一下就可以了(程式碼複用)。
  • 開閉原則:一個實體(類、函式、模組)等,應該對外擴充套件開放,對內修改關閉。也就是說在新增新功能時,不需要去修改以前的程式碼,直接加功能就行。通俗的來講,一座城市,肯定是隨著時間的推移而發展的,那麼我要在這座城市蓋個遊樂場(擴充套件),不應該對體育場進行整改(修改),你蓋就蓋你的唄,去野地去蓋,不要去修改其他已經存在的東西。(對外擴充套件開放,對內修改關閉)。
  • 里氏代換原則:子類必須替換掉它們的父型別,將一個基類物件替換成一個子類物件,程式沒有任何的異常。通俗的來講,我喜歡動物,我一定喜歡狗;我喜歡狗並不代表我喜歡所有的動物。通常我們用父類的物件來進行定義,再在執行的時候再用子類物件進行替換,比如說:List<String> list = new ArrayList<>();包括我們再開發當中定義一個BaseActivity,我們在基類中寫好基本的方法,那麼新增一個新的Activity新的功能只需要繼承BaseActivity即可。
  • 依賴倒轉原則:細節應該依賴於抽象,而抽象不應該依賴於細節。其實還是說了一個抽象類的事情,舉個例子來說,小明閱讀漫畫,需要在read方法引數中傳入漫畫,那麼小明又想閱讀小說,那麼沒必要再建立一個閱讀小說的方法,讓漫畫和小說都繼承書籍,然後read方法中傳入書籍這個父類,那麼無論我們傳入的是漫畫還是小說,都能實現閱讀。
  • 介面隔離原則:使用多個專門功能的介面,而不是使用單一的總介面。其實這個是很好理解的,得符合單一職責嘛,如果介面中方法太多,那麼我如果有需要實現這個介面中的某幾個方法,就必須實現介面中所有的方法,會出現大量的空方法。
  • 合成複用原則:儘量使用組合,而不是繼承。比如說小明要玩球,不應該繼承球類的play方法,而是去呼叫它,而且應該是還有好多種球類,比如籃球,足球,排球等去繼承球類。合成複用原則其實我們在大部分程式設計過程中都會遵守的。
  • 迪米特原則:一個模組或物件應儘量少的和其他實體類發生相互作用,使得模組相對獨立,降低耦合性。通俗的來說,我找小明借錢,小明的錢是找小紅借的,那麼這個借錢的事兒啊,我只接觸我的朋友小明,小明和小紅怎樣,我不管,跟我沒關係,到時候出什麼事情了,我也只需要跟小明解決,而不是我們三個人都有關係。

總結

對一些定義大體做了一下介紹,加深了一下記憶,包括七大設計原則也是很費勁的想一些生活中的例子來理解,可能有的地方的比喻不是那麼的形象,但是我覺得還是能加深理解,這些基本的定義在以後的學習中通過應用實踐我們再逐步的更深入的去理解。