最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java設(shè)計模式之淺談外觀模式

 更新時間:2022年09月15日 08:39:39   作者:怒放吧德德  
這篇文章主要介紹了Java設(shè)計模式之外觀模式的相關(guān)資料,需要的朋友可以參考下

簡介

外觀模式(Facade Pattern)隱藏系統(tǒng)的復雜性,并向客戶端提供了一個客戶端可以訪問系統(tǒng)的接口。這種類型的設(shè)計模式屬于結(jié)構(gòu)型模式,它向現(xiàn)有的系統(tǒng)添加一個接口,來隱藏系統(tǒng)的復雜性。

這種模式涉及到一個單一的類,該類提供了客戶端請求的簡化方法和對現(xiàn)有系統(tǒng)類方法的委托調(diào)用。

外觀模式之理解

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

實例

采用智能家居的例子來理解外觀模式,例子很簡單,當我們按下一鍵啟動開關(guān),就可以為我們打開/關(guān)閉窗戶、電視、空調(diào)、燈光等。
先看一些類圖:

具體代碼如下:

①、定義子系統(tǒng)

子系統(tǒng)分為:燈光、空調(diào)、電視、窗戶。采用單例模式,并且聲明開啟、關(guān)閉的方法。
這里只粘貼一個,其他的代碼類似。

package com.lyd.demo.subsystem;
/**
 * @Author: lyd
 * @Description: 子系統(tǒng) - 空調(diào)
 * @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("智能家居為您打開[空調(diào)]");
    }
    public void off() {
        System.out.println("智能家居為您關(guān)閉[空調(diào)]");
    }
}

②、外觀類

采用單例模式,實例化對象,并且根據(jù)需要去調(diào)用方法,暴露出接口即可完成,這里是啟動所有設(shè)備,還可以根據(jù)需要去選擇。

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();
    }
}

③、測試

調(diào)用外觀暴露的接口方法就可以。

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();
    }
}

運行結(jié)果:

好文推薦

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

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

到此這篇關(guān)于Java設(shè)計模式之外觀模式的文章就介紹到這了,更多相關(guān)Java設(shè)計模式之外觀模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java split用法詳解及實例代碼

    java split用法詳解及實例代碼

    這篇文章主要介紹了java split用法的相關(guān)資料,并附實例代碼,幫助大家學習參考,需要的朋友可以參考下
    2016-09-09
  • java開發(fā)分布式服務框架Dubbo調(diào)用過程

    java開發(fā)分布式服務框架Dubbo調(diào)用過程

    這篇文章主要為大家介紹了java開發(fā)分布式服務框架Dubbo調(diào)用過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2021-11-11
  • Java緩存ehcache的使用步驟

    Java緩存ehcache的使用步驟

    這篇文章主要介紹了Java緩存ehcache的使用步驟,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • Java中構(gòu)造函數(shù),set/get方法和toString方法使用及注意說明

    Java中構(gòu)造函數(shù),set/get方法和toString方法使用及注意說明

    這篇文章主要介紹了Java中構(gòu)造函數(shù),set/get方法和toString方法的使用及注意說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Java之Mybatis的二級緩存

    Java之Mybatis的二級緩存

    本文主要介紹Java中Mybatis的二級緩存,緩存就是一塊內(nèi)存空間,保存臨時數(shù)據(jù),它是SqlSessionFactory的緩存,對Mybaits感興趣的小伙伴可以參考閱讀
    2023-03-03
  • SpringCloud Zuul和Gateway的實例代碼(搭建方式)

    SpringCloud Zuul和Gateway的實例代碼(搭建方式)

    本文主要介紹了SpringCloudZuul和SpringCloudGateway的簡單示例,SpringCloudGateway是推薦使用的API網(wǎng)關(guān)解決方案,基于SpringFramework5和ProjectReactor構(gòu)建,具有更高的性能和吞吐量
    2025-02-02
  • J2SE基礎(chǔ)之下載eclipse并創(chuàng)建項目

    J2SE基礎(chǔ)之下載eclipse并創(chuàng)建項目

    本文給大家介紹的是最流行的java 集成開發(fā)環(huán)境IDE eclipse的使用方法,非常的簡單,有需要的小伙伴可以參考下
    2016-05-05
  • SpringBoot集成echarts實現(xiàn)k線圖功能

    SpringBoot集成echarts實現(xiàn)k線圖功能

    ECharts是一款基于JavaScript的數(shù)據(jù)可視化圖表庫,提供直觀,生動,可交互,可個性化定制的數(shù)據(jù)可視化圖表,本文給大家介紹了SpringBoot集成echarts實現(xiàn)k線圖功能,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2024-07-07
  • Maven高級的聚合和繼承的實現(xiàn)

    Maven高級的聚合和繼承的實現(xiàn)

    在軟件開發(fā)中,隨著項目規(guī)模的擴大,單個模塊的開發(fā)方式逐漸轉(zhuǎn)變?yōu)槎嗄K開發(fā),這種方式帶來了項目管理上的挑戰(zhàn),其中最常見的問題是模塊間的依賴管理和版本控制問題,本文就來介紹一下
    2024-10-10
  • spring boot整合Cucumber(BDD)的方法

    spring boot整合Cucumber(BDD)的方法

    本篇文章主要介紹了spring boot整合Cucumber(BDD)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04

最新評論

江西省| 方山县| 凤山市| 江都市| 鄂州市| 宁强县| 贵德县| 襄垣县| 阿克陶县| 哈密市| 云安县| 阿拉善右旗| 大名县| 台北市| 鄂尔多斯市| 苏尼特右旗| 永靖县| 华池县| 荥阳市| 新密市| 玉田县| 南澳县| 陆丰市| 远安县| 禹州市| 高邮市| 绿春县| 昆山市| 曲周县| 长汀县| 江孜县| 芜湖县| 肥乡县| 肥东县| 积石山| 重庆市| 平度市| 承德县| 平江县| 虎林市| 鹰潭市|