1. 程式人生 > >8、外觀模式—MVC三層結構開發中隱藏的模式

8、外觀模式—MVC三層結構開發中隱藏的模式

外觀模式(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再和遺留程式碼互動所有複雜的工作。