面向物件設計
面向物件程式由物件組成,物件包括資料和對資料進行操作的程序(通常稱為方法),
面向物件設計最困難的部分是將系統分解成物件集合,因為要考慮許多因素:封裝、粒度、依賴關系、靈活性、性能、擴展、復用等等,并且這些因素通常還是互相沖突的,那么科學地對物體進行分解,合理地設計類與類、物件與物件之間的依賴關系的是至關重要的,
1. 面向物件七大設計原則
-
單一職責原則:設計目單一的類;
-
開閉原則(OCP):對擴展開放(對提供方),對修改封閉(對使用方),用抽象構建框架,用實作擴展細節,
- 當軟體需要變化時,盡量通過擴展來實作,而不是通過修改原有的方法,
-
里氏替換原則:子類可以對父類進行擴展,但不能改變父類原有功能;
- 子類盡可能不重寫父類的非抽象方法,繼承實際是讓兩個類的耦合性增強了,運用里氏替換原則可以將父類設計為抽象方法或者介面,讓子類繼承父類或實作介面,并實作父類中的抽象方法,盡量不要重寫父類的非抽象方法,
-
依賴倒置原則:要依賴于抽象,而不是具體的實作;針對介面編程;
- 依賴倒置的三種方式:構造器、介面、set方法;
-
介面隔離原則:使用多個專門的介面比使用單一的總介面要好;(介面的單一職責,盡量使用最小介面)
- 即介面的定義要盡量實作單一職責,子類不應實作自己不需要的方法,同時也要注意介面的粒度,介面不能過小,過小會導致介面泛濫,不利于代碼維護,
-
組合重用原則:要盡量使用組合/聚合,而不是繼承來達到重用的目的;
-
迪米特法則(最少知識法則):一個物件應當對其他物件盡可能少的了解;
2. 設計模式
(一)設計模式的基本概念
設計模式:是對軟體設計中普遍存在的(反復出現)的問題,所提出的解決方案,主要關注軟體系統的設計,與具體實作語言無關;
- 架構模式:軟體設計中的高層決策(如C/S架構就屬于架構模式);
- 慣用法:與語言相關,是最底層的模式,關注軟體系統的設計與實作,實作時通過特定的編程語言來描述構件與構件之間的關系,
(二)設計模式的分類
1. 創建型模式(Creational):用于創建和管理物件類的模式;工廠模式、原型模式、單列模式、構建起模式,
抽象工廠模式:提供一個介面,可以創建一系列相關或相互依賴的物件,而無需指定它們具體的類,
構建器模式:將一個復雜類的表示與其他構造分離,使得相同的構件程序能夠得出不同的表示,
單例模式:采取一定的方法保證在整個系統中某個類只能存在一個物件實體,
原型模式:利用clone()創建出物件,
2. 結構型模式(Structural):主要是為了處理類和介面的組合問題,形成更大的結構提供方案,配接器模式、橋接模式、組合模式、裝飾模式、外觀模式、代理模式,
組合模式:又叫部分整體模式,是用于把一組相似的物件當作一個單一的物件,組合模式依據樹形結構來組合物件,用來表示部分以及整體層次,這種型別的設計模式屬于結構型模式,它創建了物件組的樹形結構,
動態代理:動態代理利用反射機制,實作了目標類(被代理類)的所有介面并重寫(生成位元組碼檔案-->jvm加載位元組碼檔案生成class類)所有方法,重寫的方法體便是代理類(實作InvocationHandler介面的類)中的invoke()方法,從而達到在不改變源代碼的前提下動態增強方法功能的目的, JDK如何實作動態代理.pdf
3. 行為型模式(Behavioral):描述類或物件互動的情況,以及職責分配的問題,解釋器、迭代器、中介者模式、觀察者模式、訪問者模式、責任鏈模式、策略模式等,
模板方法:將子類共行為抽取到父類中,具體不同的實作抽象為抽象方法,子類只需重寫父類的抽象方法實具體業務即可,
觀察者模式:目標類(被觀察)只需添加一個待通知的物件的集合,在需要通知觀察者時呼叫集合中觀察者的接受方法即可,JDk中實作的觀察者模式利用模板方法,將通知發送者所共有的屬性(Vector
)和行為(notifyObservers())封裝起來,子類只需要繼承 Observable類,在方法中呼叫notify即可,
類模式是處理類和子類之間的關系,這些關系通過繼承建立,是靜態的,編譯時就確定下來了,物件模式處理的是物件間的關系,這些關系在運行時是可以變化的,更具有動態性,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/247131.html
標籤:設計模式
上一篇:作業系統簡答題總結
下一篇:Magento開源電商專案介紹

