面向物件思想設計原則及常見的設計模式
設計原則:
單一職責原則:高內據低耦合
開閉原則:一個物件對擴展開放,對修改關閉
里氏替換原則:在任何父類出現的地方都可以用它的子類來替換;也就是說,同一個繼承體系中的物件應該有共同的行為特征,
依賴注入原則:要依賴于抽象,不要依賴于具體實作,針對抽象類或者介面編程,
介面分離原則:不應該強迫程式依賴它們不需要使用的方法,其實就是說一個介面不需要提供太多的行為,一個介面應該提供一種對外功能,不應該把所有的操作都封裝到一個介面中,
迪米特原則:一個物件應該對其他物件盡可能少的了解,也就是說降低各個物件之間的耦合,提高系統的可維護性,在模塊之間應該只通過介面編程,而不理會模塊的內部作業原理,它可以是各個模塊耦合度降到最低,促進軟體的復用,
設計模式:
經驗的總結
設計模式的分類
創建型模式 物件的創建:簡單工廠模式,工廠方法模式,抽象工廠模式,建造者模式,原型模式,單例模式,(6個)
結構型模式 物件的組成(結構):外觀模式、配接器模式、代理模式、裝飾模式、橋接模式、組合模式、享元模式,(7個)
行為型模式 物件的行為:模版方法模式、觀察者模式、狀態模式、職責鏈模式、命令模式、訪問者模式、策略模式、備忘錄模式、迭代器模式、解釋器模式,(10個)
簡單工廠模式:
靜態工廠方法模式,它定義一個具體的工廠類負責創建一些類的實體
優點:客戶端不需要在負責物件的創建,從而明確了各個類的職責
缺點:這個靜態工廠類負責所有物件的創建,如果有新的物件增加,或者某些物件的創建方式不同,就需要不斷的修改工廠類,不利于后期的維護,
工廠方法模式:
工廠方法模式中抽象工廠類負責定義創建物件的介面,具體物件的創建作業由繼承抽象工廠的具體類實作,
優點:客戶端不需要在負責物件的創建,從而明確了各個類的職責,如果有新的物件增加,只需要增加一個具體的類和具體的工廠類即可,不影響已有的代碼,后期維護容易,增強了系統的擴展性
缺點:需要額外的撰寫代碼,增加了作業量
單例模式:
保證類在記憶體中只有一個物件
如何保證類在記憶體中只有一個物件呢?
A:構造方法私有
B:在成員位置自己創建一個物件
C:通過一個公共的方法提供訪問
餓漢式:類一加載就創建物件
1 public class Student { 2 // 構造私有 3 private Student() { 4 } 5 6 // 自己造一個 7 // 靜態方法只能訪問靜態成員變數,加靜態 8 // 為了不讓外界直接訪問修改這個值,加private 9 private static Student s = new Student(); 10 11 // 提供公共的訪問方式 12 // 為了保證外界能夠直接使用該方法,加靜態 13 public static Student getStudent() { 14 return s; 15 } 16 }
懶漢式:用的時候,才去創建物件
1 public class Teacher { 2 private Teacher() { 3 } 4 5 private static Teacher t = null; 6 7 public synchronized static Teacher getTeacher() { 8 // t1,t2,t3 9 if (t == null) { 10 //t1,t2,t3 11 t = new Teacher(); 12 } 13 return t; 14 } 15 }
開發:餓漢式(是不會出問題的單例模式)
面試:懶漢式(可能會出問題的單例模式)
A:懶加載(延遲加載)
B:執行緒安全問題
a:是否多執行緒環境是
b:是否有共享資料是
c:是否有多條陳述句操作共享資料 是
Runtime類(由單例模式實作):每個 Java 應用程式都有一個 Runtime 類實體,使應用程式能夠與其運行的環境相連,exec(String command)
模板設計模式
模板方法模式就是定義一個演算法的骨架,而將具體的演算法延遲到子類中來實作
優點:使用模板方法模式,在定義演算法骨架的同時,可以很靈活的實作具體的演算法,滿足用戶靈活多變的需求
缺點:如果演算法骨架有修改的話,則需要修改抽象類
裝飾設計模式
裝飾模式就是使用被裝飾類的一個子類的實體,在客戶端將這個子類的實體交給裝飾類,是繼承的替代方案,
優點:使用裝飾模式,可以提供比繼承更靈活的擴展物件的功能,它可以動態的添加物件的功能,并且可以隨意的組合這些功能
缺點:正因為可以隨意組合,所以就可能出現一些不合理的邏輯
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/180077.html
標籤:其他
