日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java设计模式-外观模式

發布時間:2025/3/19 java 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java设计模式-外观模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我又來了,繼Java設計模式之橋接模式后,現在來到了外觀模式啦,外觀模式又稱為門面模式啦😁,下面慢慢來啦。


一張舊圖,恍惚間念起舊人

Java設計模式-外觀模式

    • 一、前言
      • 1)引入:
      • 2)概述:
      • 3)角色結構:
      • 4)使用場景
    • 二、案例
      • 代碼:
    • 三、總結
      • 優點:
      • 缺點:
    • 四、自言自語

一、前言

1)引入:

在以前,手機沒有這么方便的時候,我們一旦需要去哪里哪里辦個什么證,那真就的從這簽個字從那簽個字,簽一路,才能辦下那個證,

比如去辦房產證:

作為懶人的我們,肯定會想要是能有個一站式的就好了。直接一次解決所有問題。

其實,在我們軟件設計當中,也是如此。當一個系統的功能越來越強,子系統會越來越多,客戶對系統的訪問也變得越來越復雜。這時如果系統內部發生改變,客戶端也要跟著改變,這違背了“開閉原則”,也違背了“迪米特法則”,所以有必要為多個子系統提供一個統一的接口,從而降低系統的耦合度,這就是外觀模式的目標。

2)概述:

外觀(Facade)模式又叫作門面模式,是一種通過為多個復雜的子系統提供一個一致的接口,而使這些子系統更加容易被訪問的模式。該模式對外有一個統一接口,外部應用程序不用關心內部子系統的具體細節,這樣會大大降低應用程序的復雜度,提高了程序的可維護性。

外觀(Facade)模式是“迪米特法則”的典型應用。

迪米特法則:又叫作最少知識原則(The Least Knowledge Principle),一個類對于其他類知道的越少越好,就是說一個對象應當對其他對象有盡可能少的了解,只和朋友通信,不和陌生人說話。英文簡寫為: LOD。

3)角色結構:

主要包含以下主要角色。

  • 外觀(Facade)角色:為多個子系統對外提供一個共同的接口。
  • 子系統(Sub System)角色:實現系統的部分功能,客戶可以通過外觀角色訪問它。
  • 客戶(Client)角色:通過一個外觀角色訪問各個子系統的功能。
  • 4)使用場景

    (1)設計初期階段,應該有意識的將不同層分離,層與層之間建立外觀模式。(例如:我們平時開發時,controller調用service接口,而不用管serviceImpl的實現是如何的,即三層開發模式。)

    (2) 開發階段,子系統越來越復雜,增加外觀模式提供一個簡單的調用接口。

    (3) 維護一個大型遺留系統的時候,可能這個系統已經非常難以維護和擴展,但又包含非常重要的功能,為其開發一個外觀類,以便新系統與其交互。

    二、案例

    【例】智能家電控制

    父母年紀大了,平時是我在家的話,這開燈開電視開空調都是父母直接喊我來做的,想著自己離開家了,父母的自己動手,就給父母買了個智能音箱來控制這些。

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-n1F81uxz-1628694563887)(C:\Users\ASUS\Desktop\寧在春的學習筆記\JDK8\文檔\Java設計模式-外觀模式.assets\外觀模式.png)]

    代碼:

    電視類

    public class TV {public void on() {System.out.println("打開了電視....");}public void off() {System.out.println("關閉了電視....");} }

    燈類

    public class Light {public void on() {System.out.println("打開了燈....");}public void off() {System.out.println("關閉了燈....");} }

    空調類

    public class AirCondition {public void on() {System.out.println("打開了空調....");}public void off() {System.out.println("關閉了空調....");} }

    智能音箱

    package com.crush.facade;//智能音箱 public class SmartAppliancesFacade {private Light light;private TV tv;private AirCondition airCondition;public SmartAppliancesFacade() {light = new Light();tv = new TV();airCondition = new AirCondition();}public void say(String message) {if (message.contains("開燈")) {onLamp();} else if (message.contains("關燈")) {offLamp();} else if (message.contains("開電視")) {onTV();} else if (message.contains("關電視")) {offTV();} else if (message.contains("開空調")) {onAirCondition();} else if (message.contains("關空調")) {offAirCondition();} else {System.out.println("我還聽不懂你說的!!!");}}private void onLamp() {light.on();}private void offLamp() {light.off();}private void onTV() {tv.on();}private void offTV() {tv.off();}private void onAirCondition() {airCondition.on();}private void offAirCondition() {airCondition.off();} }

    測試:

    //測試類 public class Client {public static void main(String[] args) {//創建外觀對象SmartAppliancesFacade facade = new SmartAppliancesFacade();//客戶端直接與外觀對象進行交互facade.say("打開家電");facade.say("關閉家電");} }

    這樣就做到了通過一個智能音箱控制全部,而不用管其他的具體實現,只要知道這個接口即可以了。

    當然這只是一個體現的外觀模式的小demo,實際中并不全是一樣的,設計模式也是根據實際的軟件設計需求來進行應用的,多數情況下都是幾種設計模式一起用的。

    三、總結

    優點:

  • 降低了子系統與客戶端之間的耦合度,使得子系統的變化不會影響調用它的客戶類。
  • 對客戶屏蔽了子系統組件,減少了客戶處理的對象數目,并使得子系統使用起來更加容易。
  • 降低了大型軟件系統中的編譯依賴性,簡化了系統在不同平臺之間的移植過程,因為編譯一個子系統不會影響其他的子系統,也不會影響外觀對象。
  • 缺點:

  • 不能很好地限制客戶使用子系統類,很容易帶來未知風險。
  • 增加新的子系統可能需要修改外觀類或客戶端的源代碼,違背了“開閉原則”。
  • 不符合開閉原則,如果要改東西很麻煩,繼承重寫都不合適。
  • 四、自言自語

    你卷我卷,大家卷,什么時候這條路才是個頭啊。😇(還是直接上天吧)

    有時候也想停下來歇一歇,一直做一個事情,感覺挺難堅持的。😁

    你好,如果你正巧看到這篇文章,并且覺得對你有益的話,就給個贊吧,讓我感受一下分享的喜悅吧,蟹蟹。🤗

    如若有寫的有誤的地方,也請大家不嗇賜教!!

    同樣如若有存在疑惑的地方,請留言或私信,定會在第一時間回復你。

    持續更新中

    總結

    以上是生活随笔為你收集整理的Java设计模式-外观模式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。