初識Java設計模式

先看幾個經典的面試題:

1)請使用UML類圖畫出原型模式核心角色

2)原型設計模式的深拷貝和淺拷貝是什麼,並寫出深拷貝的兩種方式的源碼(重寫clone方法實現深拷貝、使用序列化實現深拷貝)

3)在Spring框架中哪裏使用到了原型模式,並對源碼進行分析

beans.xml

<bean id="id01" class="com.ma.spring.bean.Monster" scope="prototype"/>

4)Spring中原型bean的創建,就是原型模式的應用

5)代碼分析加debug

6)設計模式的七大原則:

1.七大設計原則核心思想

2.能夠以類圖說明設計原則

3.在項目中你哪裏使用到了ocp原則

 

設計模式七大原則:

1)單一職責原則

2)接口隔離原則

3)依賴倒換原則

4)里氏替換原則

5)開閉原則(ocp)

6)迪米特法則

7)合成複用原則

 

設計模式的重要性:

1)軟件工程中,設計模式(design pattern)是對軟件行業中普遍存在(反覆出現)的各種問題,所提出來的解決方案。這個術語是埃裏希等人在1990年代從建築設計領域引入到計算機科學的

 

設計模式在軟件中哪裏應用?

面向對象(oo)=> 功能模塊(設計模式+算法[數據結構]) => 框架(使用到多種設計模式)=> 架構(服務器集羣) 

 

設計模式的目的:

編寫軟件的過程中,程序員面臨來自耦合性,內聚性以及可維護性、可擴展性、重用性、靈活性等方面的挑戰,設計模式是爲了讓程序(軟件),具有更好:

1)代碼重用性(即:相同功能的代碼不用多次編寫)

2)可讀性(即:編程規範性,便於其他程序員的閱讀和理解)

3)可擴展性(即:當需要增加新功能時候,非常方便)

4)可靠性(即:當我們增加功能之後對原來的功能沒有影響)

5)使程序呈現高內聚、低耦合

設計模式包含了面向對象的精髓!!!

 

單一職責原則:

對於類來說,即一個類應該負責一項職責,如類A負責兩個不同的職責:職責1和職責2,當職責1需求變更改變類 A的時候,可能造成職責2的錯誤,所以要將類A的力度分解爲A1和A2

 

接口隔離原則:

客戶端不應該依賴它不需要的接口,即一個類對另一個類的依賴應該建立在最小接口上

 

依賴倒轉原則:

1)高層模塊不要依賴底層模塊,二者都應該依賴其抽象

2)抽象不應該依賴細節,細節應該依賴抽象

3)中心思想是面向接口編程

4)設計理念:相對於細節的多變性,抽象的東西要穩定的多,以抽象爲基礎搭建的架構比以細節爲基礎搭建的架構要穩定的多

 

里氏替換原則:

父類的功能可以由子類代替

 

開閉原則:

1)開閉原則是編程中最基礎、最重要的設計原則

2)一個軟件實體類,模塊和函數應該對擴展開放(對提供方),對修改關閉(對使用方)。用抽象構建框架,用實現擴展細節

3)當軟件需要變化的時候,儘量通過擴展軟件實體的方法實現變化,而不是通過修改已有的代碼

4)編程中遵循的其他原則以及使用設計模式的目的就是遵循開閉原則

 

迪米特法則:

1)一個對象應該對其他對象保持最少的瞭解

2)類與類關係越密切,耦合度越大

3)迪米特法則又叫最少知道原則,即一個類對自己依賴的類知道越少越好,也就是說,對於被依賴的類不管有多複雜,都儘量將邏輯封裝在類內部,對外除了提供public方法不對外泄露任何消息

4)迪米特法則還有個簡單的定義:只與直接的朋友通信

 

5)直接的朋友:每個對象都會與其他對象有耦合關係,只要在兩個對象之間有耦合關係,我們就說這兩個對象之間是朋友關係,耦合的方式有很多:依賴、關聯、組合、聚合等,其中我們稱出現成員變量,方法參數,方法返回值中的類爲直接朋友,也就是說,陌生的類最好不要以局部變量的形式出現在類的內部

 

合成複用原則:
原則是儘量使用合成/聚合的方式而不是繼承

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章