面試準備之設計模式

今天北京暴雪,2019-12-16  星期一,被套了大半年的萬科終於回本了

設計模式的六大原則


總原則-開閉原則:對修改關閉,對擴展開發。

里氏替換原則:在繼承類的時候,除了對父類進行一些功能的擴展外,儘量不要重載父類的方法。我們經常用父類承接子類對象,當重載父類方法後,如果有一處想調用父類原來的方法,但是實際這個父類指向的是子類對象的話,由於方法被重載,所以有可能出現意想不到後果。

單一原則:一個類的功能儘量要單一,讓一個類實現一個功能,讓代碼解耦。

依賴倒轉原則:編程依賴接口而不依賴具體的類來編程。

最少知道原則:一個類對它所引用的類知道的最少,只需要知道自己要調用的方法,至於它內部如何實現的不需要關心。

接口隔離原則:在定義接口的時候,應該追求簡單最小化,避免接口臃腫或者出現兩個功能變化而出現需要修改接口的情況。

 

類與類之間的關係

依賴關係

依賴關係是指一個類調用另外一個類作爲局部變量或者是方法參數來完成某一些功能,而不是作爲類的屬性,依賴關係是類和類之間最弱的一種關係,不要被它的名字給迷惑了。用虛箭頭來表示依賴關係
依賴關係的實例

關聯關係

類與類最常見的一種關係,就是一個類作爲另外一個的屬性,也就是成員變量來調用。用實箭頭來表示。
關聯關係的實例

聚合關係

一種強關聯關係,表示整體和部分的關係,但是部分可以不依賴整體而單獨存在。聚合關係也是通過成員對象來實現的,其中成員對象是整體對象的一部分,但是成員對象可以脫離整體對象而獨立存在。例如,學校與老師的關係,學校包含老師,但如果學校停辦了,老師依然存在。用空心菱形箭頭表示。

聚合關係的實例

組合關係

一種比聚合關係還要強的強關聯關係。也是一個類作爲另外一個類的成員變量來實現。在組合關係中,整體對象可以控制部分對象的生命週期,一旦整體對象不存在,部分對象也將不存在,部分對象不能脫離整體對象而存在。例如,頭和嘴的關係,沒有了頭,嘴也就不存在了。用實心箭頭表示。

組合關係的實例

泛化關係

就是一個類繼承另外一個類,類與類最強的一種關係。

泛化關係的實例

實現關係

接口和類的一種關係,類實現接口

實現關係的實例

 

單例模式

單例模式就是在整個工程裏面只一個這個類的實例,這樣的好處就是加快類的訪問,減少空間的浪費,

單例模式有飢漢模式和懶漢模式,其中懶漢模式的可以用雙重檢測保證線程安全,記得在申明成員變量的時候要加關鍵字volatitle。

單例模式在Spring中有用到。

工廠方法模式

由抽象工廠,抽象產品,具體工廠和具體產品組成。客戶端只需要知道具體工廠就能知道具體的產品,不需要知道產品的創建過程,實現了對象與對象之間的解耦。新增一個產品新增加一個工廠就可以了,符合開閉原則。不好地方在於創建一個新產品就要增加一個具體的工廠。增加了系統的複雜度。工廠模式也在Spring中被用到了。

抽象工廠模式

抽象工廠模式也是由抽象工廠,抽象產品,具體工廠和具體產品組成,只是相比工廠方法模式最大的不同是抽象工廠模式新增加了一個產品族的概念,就是一個工廠能生產多個產品,這多個產品組成一個產品族,就像蘋果公司不僅生產蘋果手機,也生產蘋果筆記本電腦,也生產蘋果平板電腦,這些都產品可以看成是蘋果系列的,被稱爲產品族。

建造者模式

建造者模式將類的建造和類的表示想分離,使得同樣建造過程創建不同的表示。當一個對象很複雜的時候,可能不是直接new一下就完事了,需要很多部分組裝而成,建造者負責建造對象的各個部分,而指揮者負責將組裝的建好的各個部分組裝起來。比如說一個電腦,要由cpu,主板,硬盤,顯示器組成。這個時候就需要找一個具體的建造者去建造這些部件,然後交給一個指揮者將這些部件組裝好,才能完成一個電腦的配置。這裏指揮者和建造者有一個關聯關係,就是指揮者調用建造者建造各個部分,並將各個部分組裝起來。分爲產品對象,抽象建造者,具體建造者和指揮者。建造者模式工廠模式比較起來的話建造者更在意的是對象的組裝過程,而工廠模式更在意的是對象的創建。

適配器模式

適配器模式有目標接口,被適配者,適配器三個組成。當我們組建庫裏面有這個這個功能的實現類,但這個類的實現接口不符合當前的接口規範的時候,我們需要對這個類做一些包裝,讓他符合我們的接口規範。適配器分爲類結構型模式和對象結構型模式。

 

發佈了89 篇原創文章 · 獲贊 110 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章