1:單例模式
創(chuàng)建一個單例對象 避免重復(fù)創(chuàng)建對象而導(dǎo)致的資源浪費(fèi)
2:工廠模式
主要分簡單工廠 工廠方法 抽象工廠
其中抽象工廠了解即可:實際上是一個類中創(chuàng)建多類對象
簡單工廠:把創(chuàng)建對象的邏輯抽取出來 形成一個真正生產(chǎn)對象的工廠類 (或工廠方法)
工廠方法: 使用內(nèi)外部工廠的結(jié)構(gòu) 外部工廠生產(chǎn)內(nèi)部工廠 內(nèi)部工廠真正的生產(chǎn)對象
可以使用Map集合容器來存儲創(chuàng)建好的 有狀態(tài) 或者 無狀態(tài)的對象
3:代理模式
靜態(tài)代理 與 動態(tài)代理
靜態(tài)代理 A 調(diào)用 B的方式時 先經(jīng)過B的代理類的方法 通過代理類的方法做增強(qiáng) (每一個方法都需要代理)
動態(tài)代理 利用反射完成AOP思想 在實現(xiàn)接口的實現(xiàn)類中 直接代理所有方法 在所有方法前后做增強(qiáng) (自動代理所有的方法)
4:裝飾器模式
裝飾器類與普通類 一起繼承抽象類或者實現(xiàn)父接口類
因此裝飾器利用了組合的方法 可以使用多個裝飾器組合在一起 對某個類的某個方法 做各種增強(qiáng)
裝飾器類里面的方法名 與 普通類的方法名一致 并且調(diào)用普通方法 在調(diào)用前后實現(xiàn)了增強(qiáng)
注意:
代理和裝飾器的區(qū)別
1:代理通常是 使用反射的方法 增強(qiáng)所有方法 并且 增強(qiáng)前后與本身方法沒有太大關(guān)聯(lián)(打印日志)
2:裝飾器通常是 使用類組合的方法 增強(qiáng)單個方法 并且 增強(qiáng)前后與本身方法有太大關(guān)聯(lián) (支付時積分抵扣)
5:模板模式
使用抽象類做為模板 抽象類中用使用final修飾的方法 去順序調(diào)用本抽象類的其他方法
實現(xiàn)類繼承了該抽象類的模板就需要 按照該模板來執(zhí)行相應(yīng)的邏輯 做到了代碼規(guī)范流程的作用
6:觀察者模式
實際上觀察者模式就是發(fā)布訂閱模式 一個發(fā)布者 多個訂閱者 類似于消息框架 或者 spring的監(jiān)聽器
發(fā)布者具有注冊訂閱者功能 使用Map集合容器存儲訂閱者的信息 當(dāng)發(fā)布者發(fā)布信息對容器中的訂閱發(fā)送消息即可
7: 策略模式
策略模式 主要是用來做策略(邏輯)的選擇 同時避免大量的if-else判斷
主要通過方法:
1:可以使用枚舉來獲取對應(yīng)的 策略類型
2:可以使用枚舉來獲取對應(yīng)的 策略對象
3:可以使用Map集合容器來存儲策略對象 并 根據(jù)策略類型獲取Map集合容器的策略對象
最終達(dá)到:完全避免了if-else 就能 使用 有狀態(tài)或者無狀態(tài) 的策略對象并執(zhí)行對應(yīng)邏輯
項目連接
請配合項目代碼食用效果更佳:
項目地址:
https://github.com/hesuijin/hesujin-design-pattern
Git下載地址:
https://github.com.cnpmjs.org/hesuijin/hesujin-design-pattern.git
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。