8、外觀模式—MVC三層結構開發中隱藏的模式
阿新 • • 發佈:2019-01-26
外觀模式(Facade):為子系統中的一組介面提供y一個一致的介面,此模式定義了一個高層介面,這個介面使得這一子系統更加容易sh使用
UML圖:
package com.thpin.repository.designpattern; public class FacadeDemo { public static void main(String[] args) { Facade facade = new Facade(); facade.methodA(); facade.methodB(); } } /* * 子系統一 */ class SubSystemOne { public void methodOne() { System.out.println("子系統方法一"); } } /* * 子系統二 */ class SubSystemTwo { public void methodTwo() { System.out.println("子系統方法二"); } } /* * 子系統三 */ class SubSystemThree { public void methodThree() { System.out.println("子系統方法三"); } } /* * 子系統四 */ class SubSystemFour { public void methodFour() { System.out.println("子系統方法四"); } } /* * 外觀,包含四個子系統 */ class Facade { private SubSystemOne one; private SubSystemTwo two; private SubSystemThree three; private SubSystemFour four; public Facade() { one = new SubSystemOne(); two = new SubSystemTwo(); three = new SubSystemThree(); four = new SubSystemFour(); } // 子系統的一種組合 public void methodA() { System.out.println("方法組A()"); one.methodOne(); three.methodThree(); four.methodFour(); } // 子系統的另一種組合 public void methodB() { System.out.println("方法組B()"); two.methodTwo(); three.methodThree(); four.methodFour(); } }
結果:
方法組A()
子系統方法一
子系統方法三
子系統方法四
方法組B()
子系統方法二
子系統方法三
子系統方法四
外觀模式的程式碼結構,對於有一些開發經驗的coder是不是有一種似曾相識的感覺。沒錯和我們常用的MVC三層結構層次之間的處理很像,Controller 和 Model 之間常有個service層,service裡面有很多dao或biz屬性,其實這個service就是外觀模式。
外觀模式起到的作用:首先在設計階段,應該有意識的將不同的兩個層分離,層與層之間建立外觀模式,有效降低耦合性;其次,在開發階段,子系統往往因為不斷的重構演化而變得越來越複雜,增加外觀Facade可以提供一個簡單的介面,降低複雜度減少層次之間的依賴;第三,在維護一個遺留的大型系統時,可能這個系統已經非常難以維護和擴充套件了,但老系統包含很多重要的功能,這時為新系統開一個Facade類,為設計粗糙和高度複雜的遺留程式碼來提供清晰的介面,讓新系統和Facade互動,Facade再和遺留程式碼互動所有複雜的工作。