1. 程式人生 > >設計模式之門面模式(外觀模式)

設計模式之門面模式(外觀模式)

門面模式

  • 概念
  • 何時使用
  • 類圖
  • 程式碼例項

概念

當類A和多個類互動時,並且呼叫其方法很亂時,為了降低類之間的耦合性,符合迪米特最少知識法則,專門抽出一個類,並且提供出幾個簡單明瞭的介面給A類,那麼具體的複雜方法呼叫交給此類進行管理,該類就是為門面類。

何時使用

在開發的時候,我們採用分層思想,控制層、邏輯層、持久層。每層之間使用門面類進行互動。 還有就是在開發過程中,使用各種設計模式導致有很多很小的類,這個時候為了降低類的耦合度,專門提供Facade提供一個簡單介面。

當我們接觸到很複雜的老系統,我們又不想去重構,但是有些功能現在必須要使用的,使用門面模式也很合適。提供一個簡單的介面給新系統使用,讓這個Facade和老系統互動所有複雜工作。

在這裡插入圖片描述

類圖

在這裡插入圖片描述

程式碼例項

Facade 門面類

/**
 * @author duanyimiao
 * @create 2018-09-26 10:19 AM
 * @description 門面類
 **/
public class Facade {

    private SubSystem1 subSystem1;
    private SubSystem2 subSystem2;
    private SubSystem3 subSystem3;
    private SubSystem4 subSystem4;
    private SubSystem5 subSystem5;
    private
SubSystem6 subSystem6; public Facade(){ subSystem1 = new SubSystem1(); subSystem2 = new SubSystem2(); subSystem3 = new SubSystem3(); subSystem4 = new SubSystem4(); subSystem5 = new SubSystem5(); subSystem6 = new SubSystem6(); } public void
methodA(){ subSystem1.m1(); subSystem3.m3(); subSystem5.m5(); } public void methodB(){ subSystem2.m2(); subSystem4.m4(); subSystem6.m6(); } }
/**
 * @author duanyimiao
 * @create 2018-09-26 10:19 AM
 * @description
 **/
public class SubSystem1 {

    public void m1(){
        System.out.println("SubSystem1 m1");
    }
}
/**
 * @author duanyimiao
 * @create 2018-09-26 10:19 AM
 * @description
 **/
public class SubSystem2 {

    public void m2(){
        System.out.println("SubSystem2 m2");
    }
}

/**
 * @author duanyimiao
 * @create 2018-09-26 10:19 AM
 * @description
 **/
public class SubSystem3 {

    public void m3(){
        System.out.println("SubSystem3 m3");
    }
}
/**
 * @author duanyimiao
 * @create 2018-09-26 10:19 AM
 * @description
 **/
public class SubSystem4 {

    public void m4(){
        System.out.println("SubSystem4 m4");
    }
}
/**
 * @author duanyimiao
 * @create 2018-09-26 10:19 AM
 * @description
 **/
public class SubSystem5 {

    public void m5(){
        System.out.println("SubSystem5 m5");
    }
}

/**
 * @author duanyimiao
 * @create 2018-09-26 10:19 AM
 * @description
 **/
public class SubSystem6 {

    public void m6(){
        System.out.println("SubSystem6 m6");
    }
}

/**
 * @author duanyimiao
 * @create 2018-09-26 10:19 AM
 * @description
 **/
public class Client {
    public static void main(String[] args) {
         Facade facade = new Facade();
         facade.methodA();
         facade.methodB();
    }
}

輸出結果

SubSystem1 m1
SubSystem3 m3
SubSystem5 m5
SubSystem2 m2
SubSystem4 m4
SubSystem6 m6