基本的設計模式概括

禿了禿了 快跑發表於2020-10-09

1.建立型設計模式
①工廠模式:
在原來的建立物件的時候需要對物件一個個的建立
不使用工廠模式會在建立物件的時候 建立多個物件 讓每個之間的耦合性比較大 這個時候就要用到了工廠模式
優點:實現了物件之間的解耦
缺點:當增加一個物件或者是減少的時候 就需要改變工廠模式從而更改原始碼這種情況在現實的編碼之中是不被允許的
適用情況:物件少的情況下 不存在物件的增加

②工廠方法模式
工廠模式不是23種模式之一 因為:不符合開閉原則
但是工廠模式會存在一定的侷限性 就是增加修改物件的時候會出現要求更改相關的工廠原始碼這個時候就需要用到工廠方法模式 建立相關的類來進行 在增加的時候只需要增加相關的類 來進行更改 而不是去更改原始碼
優點:解決了工廠模式的缺點 不需要跟改原始碼 適合建立大量的工廠模式產生的物件
缺點:就是增加了相關的程式碼量 當很多個物件的時候就會出現大量的程式碼
適用情況:當存在大量的物件的時候

③抽象工廠模式

④單例模式
單例模式生產出的物件是一個 而且是相同的只能生產出一個 不能生產出多個 僅僅需要一個例項而不是多個怎麼樣才能保證呢 例如 執行緒池 連線池 工廠類等等
要點是:1.只能有一個例項 2.必須自行建立這個例項 必須自己向整個系統提供例項

餓漢式單例模式
在類載入的時候就進行建立 而不是建立物件的時候建立
優點:執行緒安全 而且是在類載入在的時候進行建立 速度相對較快一點
缺點:執行的效率可能有點低

懶漢式單例模式
不是在類載入的時候進行建立 而是在建立例項的時候才會被建立
優點:節省了資源 提高了資源的利用率
缺點:在多執行緒的情況下可能會出現多個例項 (這是不被單例模式允許的 不能出現多個例項)

雙重檢測懶漢式單例模式
1.因為懶漢式單例模式可能會出現多個例項所以就有了雙重檢測的出現
2.在對懶漢式的時候 會讓執行緒睡一會到就會出現 例項化物件有多個
3. 這樣就考慮來進行加上鎖synchronized 這個時候需要加上一個確定的物件 加上這個類的.class
4.這樣如果是可能會出現極小概率的情況就是二者都是空的時候都會進入到這個導致不同 這個時候就需要再進行判斷是否為空了 如果是在裡面加的話就會導致 鎖沒有 這個時候還是要在外面進行加
5.還是不行還有可能出現會有不同的可能這樣的話就需要在類載入的時候進行加上volatile這個關鍵字
作用是 禁止重排序 這樣才能是一個真正意義上的單例模式
優點:來檢查懶漢式單例模式是否是到單例模式 就是效率高 不執行加鎖的方法就不會例項化物件
缺點:就是還是會出現一些漏洞 需要加上volatile

靜態內部類單例模式
資源利用率高 執行緒安全

一般情況下 單利模式中使用 餓漢式 和靜態內部類單例模式就已經足夠了 但是面試的時候可能會讓你手寫單例模式

⑤原型模式
即使存在一些情況 有可能會出現建立個例項化物件 但是例項化物件需要很多歌相同的但是如果是 再進行建立的話就是付出的代價太大了 這時候就只是對原來的進行小修小補 這個是時候就用到了相關的object物件的clone方法 就是去建立並進行克隆 使用到了clone

⑥建造者模式

2.結構型設計模式
①外觀模式
就是業務層的那種模式 利用的是介面 然後進行相關的業務層的相關的子業務的查詢

②裝飾模式
在建立例項化物件的時候會出現相關的建立多個物件 但是會麻煩 就會導致面向多量的要求的時候鑑賞子類的建立的數量 如果使用繼承的話就會產生很多的排列的順序 就到很麻煩 所以才去裝飾的模式 就出省去很多的麻煩 然後就和 InputStream in= new InputStream(new BufferedInputStream(new FileInputStream));
這個就是採用的是創世模式
優點:就是面對很多的要求的時候會出現建立很多的子類的數量的情況這個時候 就用這種模式 更加的靈活 可以進行增加不同的裝飾 簡化原有的類 讓原有的類進行分解把核心的功能和裝飾的功能分開
缺點:可能建立的類有點多 但是相比於繼承得情況產生的類也不

相關文章