【設計模式】Java設計模式 - 外觀模式

Java設計模式 - 外觀模式

😄 不斷學習才是王道
🔥 繼續踏上學習之路,學之分享筆記
👊 總有一天我也能像各位大佬一樣
🏆原創作品,更多關注我CSDN: 一個有夢有戲的人
👊準備將部落格園、CSDN一起記錄分享自己的學習心得!!!
🌝分享學習心得,歡迎指正,大家一起學習成長!

image

簡介

外觀模式(Facade Pattern)隱藏系統的複雜性,並向客戶端提供了一個客戶端可以訪問系統的介面。這種類型的設計模式屬於結構型模式,它向現有的系統添加一個介面,來隱藏系統的複雜性。

這種模式涉及到一個單一的類,該類提供了客戶端請求的簡化方法和對現有系統類方法的委託調用。
                                                                                                                                                    ———— 菜鳥聯盟

外觀模式之理解

對於外觀模式,我們可以理解為他是將一些複雜的介面或類進行隱藏,自己暴露出更為簡單的操作方法,使得以我們不需要去對複雜方法的操作。就比如要完成一道工序,工序又有許多步驟,在不同情況要使用不同工序的方法,如果是傳統的方式,一個一個調用,那麼到一定量就會顯得調用的複雜並且維護起來困難,因此可以使用外觀模式,將一起使用的方法封裝在一起,這樣只需要調用這個外觀的方法即可完成。
我們看一下外觀模式的UML圖:
image

實例

採用智慧家居的例子來理解外觀模式,例子很簡單,當我們按下一鍵啟動開關,就可以為我們打開/關閉窗戶、電視、空調、燈光等。
先看一些類圖:
请添加图片描述

具體程式碼如下:

①、定義子系統

子系統分為:燈光、空調、電視、窗戶。採用單例模式,並且聲明開啟、關閉的方法。
這裡只粘貼一個,其他的程式碼類似。

package com.lyd.demo.subsystem;
/**
 * @Author: lyd
 * @Description: 子系統 - 空調
 * @Date: 2022-08-31
 */
public class AirConditioner {
    private static AirConditioner airConditioner = new AirConditioner();
    public static AirConditioner getAirConditioner() {
        return airConditioner;
    }
    public void on() {
        System.out.println("智慧家居為您打開[空調]");
    }
    public void off() {
        System.out.println("智慧家居為您關閉[空調]");
    }
}

②、外觀類

採用單例模式,實例化對象,並且根據需要去調用方法,暴露出介面即可完成,這裡是啟動所有設備,還可以根據需要去選擇。

package com.lyd.demo.faced;
import com.lyd.demo.subsystem.AirConditioner;
import com.lyd.demo.subsystem.Lights;
import com.lyd.demo.subsystem.Tv;
import com.lyd.demo.subsystem.Windows;
/**
 * @Author: lyd
 * @Description: 外觀模式
 * @Date: 2022-08-31
 */
public class SmartHomeFaced {
    private Lights[] lights = new Lights[4]; // 4盞燈
    private Tv tv;
    private AirConditioner airConditioner;
    private Windows windows;
    public SmartHomeFaced() {
        this.lights[0] = Lights.getLights();
        this.lights[1] = Lights.getLights();
        this.lights[2] = Lights.getLights();
        this.lights[3] = Lights.getLights();
        this.tv = Tv.getTv();
        this.airConditioner = AirConditioner.getAirConditioner();
        this.windows = Windows.getWindows();
    }
    public void openAll() {
        lights[0].on(0);
        lights[1].on(1);
        lights[2].on(2);
        lights[3].on(3);
        tv.on();
        airConditioner.on();
        windows.on();
    }
    public void offAll() {
        lights[0].off(0);
        lights[1].off(1);
        lights[2].off(2);
        lights[3].off(3);
        tv.off();
        airConditioner.off();
        windows.off();
    }
}

③、測試

調用外觀暴露的介面方法就可以。

package com.lyd.demo.test;

import com.lyd.demo.faced.SmartHomeFaced;

/**
 * @Author: lyd
 * @Description: 測試
 * @Date: 2022-08-31
 */
public class FacedTest {
    public static void main(String[] args) {
        SmartHomeFaced smartHomeFaced = new SmartHomeFaced();
        smartHomeFaced.openAll();
        smartHomeFaced.offAll();
    }
}

運行結果:
image

好文推薦

今天的內容還算是簡單好理解的,多看看,多動手理解就會更快!

👍創作不易,可能有些語言不是很通暢,如有錯誤請指正,感謝觀看!記得一鍵三連哦!👍