先看幾個經典的面試題:
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)直接的朋友:每個對象都會與其他對象有耦合關係,只要在兩個對象之間有耦合關係,我們就說這兩個對象之間是朋友關係,耦合的方式有很多:依賴、關聯、組合、聚合等,其中我們稱出現成員變量,方法參數,方法返回值中的類爲直接朋友,也就是說,陌生的類最好不要以局部變量的形式出現在類的內部
合成複用原則:
原則是儘量使用合成/聚合的方式而不是繼承