幾個比較重要的設計模式的總結與應用

1. 設計模式分爲創建型,結構型,行爲型。

 
2. 創建型
2.1 工廠方法。生產同一接口的不同產品。
如:Spring Aop中AopProxyFactory(具體實現類爲DefaultAopProxyFactory)生產AopProxy接口下的兩個產品Cglib和JdkProxy。
如:Ibatis中DataSourceFactory(三個工廠分別實現該接口)生產接口爲DataSource的Dbcp,Jndi,Simple三種不同的數據源。

2.2 單例模式。工廠的一種,但永遠只提供相同的一個對象,即一對象只被new一次。
餓漢式(直接new,非延遲加載)。【推薦使用,《Effective Java》71條也建議慎用延遲化加載】
懶漢式(延遲加載),存在同步問題。可以通過加Synchronized或用volatile關鍵字。double-check也是有問題的,進階之最終推薦版本爲私有靜態內部類實現。

3. 結構型
3.1 裝飾者模式。每個裝飾類都含有一個指向父類(父接口)的引用,然後可以在該引用的基礎上,在新實現的方法中添加新的功能。
如:IO中嵌套new對象。new DataInputStream( new FileInputStream( new File( "")) )

3.2 適配器模式。把源接口的實現類適配成目標接口的實現類。目的就在銜接兩個不同接口的系統。
如:SpringMvc中的HandlerAdapter
如:Spring Aop中AdvisorAdapter將不同的Advisor(前置,後置,around等)適配成攔截器MethodInterceptor

3.3 代理模式。
如:JdkProxy

4. 行爲型
4.1 策略模式。主要針對一組算法,將每一個算法封裝到具有共同接口的獨立的類中,從而使得它們可以相互替換。

4.2 觀察者模式。被觀察者(主題)被N個觀察者觀察着,被觀察者有變化,則會導致所有觀察者也變化。主要應用於生命週期控制。
如:Tomcat的lifecycle和lifecyclelistener
LifecycleListener代表的是抽象觀察者,它定義一個lifecycleEvent方法,這個方法就是當主題變化時要執行的方法。而lifecycle則是主題,如具體主題StandardServer。不過這裏的統籌管理是交給LifecycleSupport。它能夠觸發lifecycle自身的start,stop函數進行子容器的啓動關閉(和觀察者模式無關),也可以通過使lifecycle變化來觸發lifecyclelistener的event事件。
如:Spring的ApplicationListener和ApplicationEvent
實現Listener接口的bean,當容器觸發Event事件時將觸發這些bean的event處理機制。如容器觸發啓動事件,同時也能讓某些bean也做出相應的啓動操作響應。

4.3 模板方法。父類定義骨架方法,骨架方法建議定義爲final類型,不被子類覆寫。同時骨架方法一般會調用多個抽象方法,這些方法具體留給子類去實現。
如:HttpServlet的service方法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章