跳到主要內容
黯羽輕揚每天積累一點點

設計模式之複合模式(Compound Pattern)

免費2015-03-07#Design_Pattern#复合模式#Compound Pattern

複合模式可不只是多個模式的組合,雖然我們可以輕易地拿來幾個模式應用到我們的專案中,但這絕不能稱為複合模式。

一.什麼是複合模式?

在形式上,複合模式確實是多個模式的組合,但滿足了這一條並不一定是複合模式,注意它的定義:

將多個模式結合起來形成一個「框架」,以解決一般性問題。一提到「框架」,可能最容易聯想到的就是 MVC 吧,不過 MVC 確實是一個經典的複合模式

二.MVC 與複合模式

Model,View,Controller 各自的職責:

這裡不得不強調一下控制邏輯與應用邏輯(演算法邏輯)的區別:

  • 所謂控制邏輯,就是判斷在當前情景下應該調用什麼物件的什麼方法
  • 而應用邏輯指的是具體物件的具體方法的內部實現(某個複雜的演算法,或者一系列的具體處理)

(非要細說的話,View 裡面其實也包含了一點控制邏輯(根據使用者動作判斷應該調用哪一個 Controller),當然,一般情況我們都把這點邏輯忽略不計的)

MVC 的最大優點就是把表現層 View 與模型 Model 分離,實現了設計上的鬆耦合(應對變化)以及程式碼的複用(View 可以隨便換,只需要改改新 View 裡面那一丁點兒控制邏輯就好了)

前面說過了 MVC 是一種複合模式,那它到底複合了哪些模式,一起看看:

  • 觀察者模式:V 和 C 都是 M 的觀察者(Model 的狀態更新要及時通知 V 更新視圖,或者通知 C 做相應邏輯處理)
  • 策略模式:C 是 V 的「策略」,所以 V 包含的控制邏輯就是「選擇策略」,也就是選擇控制器 Controller
  • 組合模式:V 的自身實現應用了組合模式(調用頂層容器的 repaint 方法,容器內的所有元件都會重繪)

MVC 應用了多個模式,並能夠較好的解決設計上的一般性問題,所以被稱為複合模式

三.傳統 MVC 與 Java 本地程式的 MVC

從上面可以看到傳統 MVC 中具體的應用邏輯都被包含在 M 裡面,也就是說,我們的模型物件不僅具有一系列屬性(和 getter, setter)還要有相關的資料處理方法

這與 Java 本地程式中的 MVC 不同,在 Java 程式中我們通過建包 package 來對程式碼結構進行分層,一般是這樣做的:

需要說明的是:

  • vo 包裡面一般都是各個實體抽象出來的類(也有把包名定為 bean 的,不過意義都一樣,只包含各個實體的屬性及其對應的 getter 和 setter,不含應用邏輯)
  • dao 和 core 都是 service 的輔助層,三層共同映射為 Controller

Java 本地程式的 MVC 與傳統 MVC 的最大區別就是 Java 中的 M 更純粹(乾淨),只包含單純的值物件,不含任何應用邏輯,幾乎所有的邏輯都被裝到了 Controller 裡面(各種 Concrete Service 類)

寫在後面:

應用了複合模式的成熟框架遠不止 MVC 一個,只是其餘的框架目前尚未接觸到,不好妄加評論

面對一個不熟悉的框架,不妨先從設計的角度簡單分析下它的內部實現,比如應用了哪些設計模式,各個層的功能及層間的交互等等

瞭解一些基礎的設計模式有助於我們快速接受一個框架,只有清楚了框架的內部實現,才能更好的駕馭它。。

評論

暫無評論,快來發表你的看法吧

提交評論