設計模式的六大原則
- 單一原則:一個類或者一個方法只負責一項職責,盡量做到類的只有一個行為原因引起變化,
- 里氏替換原則:子類可以擴展父類的功能,但不能改變原有父類的功能,
- 依賴倒置原則:面向介面編程(通過介面作為引數實作應用場景),抽象就是介面或者抽象類,細節就是實作類,
- 介面隔離:建立單一介面(復雜的介面,根據業務拆分成多個簡單介面),
- 迪米特原則:最少知道原則,盡量降低類與類之間的耦合(一個物件應該對其他物件有最少的了解),
- 開閉原則:用抽象構建架構,用實作擴展原則,
單例模式
單例模式就是在整個運行時一個類只能構建一個實體物件,那為什么需要單例模式呢?因為有些類的實體的創建和銷毀對資源來說消耗不大(比如 String 類),并且很多實體是可以復用的(比如資料庫的連接物件),
Java如何去實作單例模式
單例模式的寫法需要考慮三點:
- 是不是懶加載(即要用到這個實體才去創建,而不是一來就創建好了的,因為有的物件創建的花銷很大,萬一創建了一次都沒有被用到就很虧)
- 是否執行緒安全
- 能否通過反射來破壞(一般來說不用考慮它)
一、這是第一種寫法,最普通的,只滿足了懶加載的要求(不建議直接在方法上直接加synchronized;來保證執行緒安全,性能太差了),
public class Single {
private Single(){}; 構造器私有,無法new出來
private Single instance = null; 初始化物件為空
public Single getInstance() {
if(instance == null){
instance = new Single();
}
return instance;
}
}
二、雙檢鎖寫法(推薦使用),這種寫法保證了懶加載與執行緒安全,并且加了volatile關鍵字來確保創建物件時不會指令重排序,
public class Single {
private volatile Single instance;
public Single(){}
public Single getInstance() {
if(instance == null){
synchronized (Single.class){
if(instance == null){
instance = new Single();
}
}
}
return instance;
}
}
三、列舉寫法,這種方法保證了不會被反射破壞與執行緒安全,但是無法滿足懶加載,
public enum Single {
INSTANCE;
}
所以,目前是沒有一種寫法可以滿足三個條件,因為反射破壞這個就不咋考慮了(畢竟反射破壞大多是人為的),還有一些寫法就沒記錄了,像內部類寫法等…
工廠模式
工廠模式就是定義一個用于創建物件的介面,讓子類決定實體化哪些類,然后工廠方法使一個類的實體化延遲到其子類,其中又分為:簡單工廠模式、工廠方法模式、抽象工廠模式,
簡單工廠模式
創建一個物件可能是極其復雜的,比如你得給它賦值很多屬性一堆東西,但是用戶要的東西卻很單一(就比如一個汽車工廠,它可以生產寶馬或者奔馳,并且生產的程序很繁瑣,但是用戶買車就直接告訴你要寶馬,你直接給用戶一輛寶馬就行了),所以當用戶想要得到一個物件時,直接 new Factory 就可以了,代碼如下:

其缺點也很明顯,這個工廠不夠靈活,就是每當要新增一個產品的時候,需要去修改這個工廠,
工廠方法模式
工廠方法模式就是每個物件都有自己對應的工廠,即要新增產品的時候不去原有的工廠里新增,直接新增一個對應的工廠,
抽象工廠模式
即它可以生產多個大類的產品,工廠方法模式只能生產某一大類的產品,比如工廠方法模式只能生產汽車,而抽象工廠模式不僅可以生產汽車,還可以生產手機等等產品,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/287594.html
標籤:其他
上一篇:Web服務器群集——HAproxy+Nginx負載均衡集群
下一篇:Java實作多執行緒局域網聊天室
