1. 程式人生 > >《設計模式之禪》讀書筆記-策略模式、享元模式、工廠模式、門面模式混用

《設計模式之禪》讀書筆記-策略模式、享元模式、工廠模式、門面模式混用

前一篇講的什麼是策略模式,策略模式的優缺點,在實際應用中肯定不能這麼簡單的應用,需要結合其他模式混用。比如結合門面模式解決所有策略類都需要對外暴露的缺點,使用享元模式解決多次建立例項的缺點等。

此篇是根據工作總結而來,業務需求改進與升級需要我們提供一個推送的訊息系統,經過選型確定使用Netty與WebSocket做技術支撐。Netty的API簡單統一,直接繼承它的SimpleChannelUpstreamHandler(4.0以下)或SimpleChannelInboundHandler(4.0以上)通過重寫messageReceived方法即能獲取資訊流,而我們所有的業務邏輯都要在這個方法裡面做處理。現有的需求是客戶能登入、登出、修改各種狀態,在準備的時候能夠推送各種訊息(卡片訊息、等簡短的訊息),很明顯,這個要用策略模式來做,登入、登出、狀態切換、訊息推送等是我們的具體策略類,需要用到策略列舉,來對應訊息選擇用哪個策略類來處理,簡單的類圖如下:

ss

但是實際上這樣做毫無藝術感。

經過優化之後的類圖如下:

任務中心策略模式

增加了兩個類,SubscribeServiceFactory以及EventService,我們在初始化的時候直接用spring例項化各個策略的xxxHandler(享元模式),EventService提供了倆方法,subscribe與publish,SubscribeServiceFactory通過呼叫subscribe訂閱xxxHandler的策略處理類(即在EventService儲存對應的引用實際上這是一個key-value對,key是策略列舉的值,value是對應的策略類),publish是對策略列舉的一些封裝使用,使其找到對應的策略類(門面模式)。