Java之23種設計模式
阿新 • • 發佈:2018-12-29
說明:
本人目前沒有涉及到很深入的設計模式的應用,所以在這裡簡單陳述一下自己接觸過的模式。忘小夥伴們海涵。如果有很好的借鑑,可以多多可我留言,我進行補充,大家一起進步,謝謝。
設計模式是程式碼可用性的延伸。
設計模式是世界上各種各樣程式設計師用來解決特定設計問題的嘗試和測試的方法。
①建立型模式;
②結構型模式;
③行為型模式;
※標識:為常用設計模式,8種。
建立型模式 | 結構型模式 | 行為型模式 | J2EE模式 |
※工廠模式 | ※介面卡模式 | 責任鏈模式 | MVC 模式 |
※抽象工廠模式 | 橋接模式 | 命令模式 | 業務代表模式 |
※單例模式 | 過濾器模式 | 直譯器模式 | 組合實體模式 |
※建造者模式 | 組合模式 | 迭代器模式 | 資料訪問物件模式 |
原型模式 | ※裝飾器模式 | 中介者模式 | 前端控制器模式 |
外觀模式 | 備忘錄模式 | 攔截過濾器模式 |
|
享元模式 | 觀察者模式 | 服務定位器模式 |
|
※代理模式 | 狀態模式 | 傳輸物件模式 | |
空物件模式 | |||
※策略模式 | |||
模板模式 | |||
訪問者模式 |
設計模式六大原則:
①開閉原則:對擴充套件開放,對修改關閉;
②里氏代換原則:是面向物件的基本原則之一。是對開閉原則的補充。實現開閉原則的關鍵是抽象化,而基類與子類的繼承關係就是抽象化的具體實現,所以里氏代換原則是對實現抽象化的具體步驟的規範。
③依賴倒轉原則:針對介面程式設計,依賴於抽象而不依賴於具體;是開閉原則的基礎。
④介面隔離原則:使用多個隔離的介面比使用單個的介面要好。降低類之間的耦合度。
⑤迪米特法則:一個實體應該儘量少的於其他實體之間發生相互作用,使得系統功能模組相對獨立。
⑥合成複用原則:儘量使用合成/聚合的方式,而不是使用繼承。
常用設計模式:
單例模式:
特點:
1、單例類只能有一個例項。
2、單例類必須自己建立自己的唯一例項。
3、單例類必須給所有其他物件提供這一例項。
①餓漢式[立即載入]
//餓漢式單例
public class Singleton1 {
//私有構造
private Singleton1() {}
private static Singleton1 single = new Singleton1();
//靜態工廠方法
public static Singleton1 getInstance() {
return single;
}
}
②懶漢式[延遲載入]
//懶漢式單例[延遲載入方式,多執行緒不安全]
public class Singleton2 {
//私有構造
private Singleton2() {}
private static Singleton2 single = null;
public static Singleton2 getInstance() {
if (single == null) {
single = new Singleton2();
}
return single;
}
}
//懶漢式單例[延遲載入方式,多執行緒安全,但效率低]
public class Singleton3 {
private Singleton3() {}
private static Singleton3 single = null;
public static Singleton3 getInstance() {
//等同於 synchronized public static Singleton3 getInstance()
synchronized (Singleton3.class) {
//注意:裡面的判斷是一定要加的,否則出現執行緒安全問題
if (single == null) {
single = new Singleton3();
}
return single;
}
}
}
//懶漢式單例[延遲載入方式,多執行緒安全,效率高]
public class Singleton4 {
private Singleton4() {}
private static Singleton4 single = null;
// 雙重檢查
public static Singleton4 getInstance() {
if (single == null) {
synchronized (Singleton4.class) {
if (single == null) {
single = new Singleton4();
}
}
}
return single;
}
}
//靜態內部類
public class Singleton5 {
private Singleton5() {}
//靜態內部類
private static class innerObject {
private static Singleton5 single = new Singleton5();
}
public static Singleton5 getInstance() {
return innerObject.single;
}
}
//static靜態程式碼塊實現
public class Singleton6 {
private Singleton6() {}
private static Singleton6 single = null;
static{
single = new Singleton6();
}
//靜態程式碼塊
public static Singleton6 getInstance() {
return single;
}
}
單例優勢:
1) 減少建立Java例項所帶來的系統開銷
2) 便於系統跟蹤單個Java例項的生命週期、例項狀態等。
工廠模式:
策略模式:
引用:
http://www.cnblogs.com/garryfu/p/7976546.html
https://www.cnblogs.com/yuanye0918/p/5961087.html