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

Java設計模式中的外觀模式詳解

 更新時間:2023年02月08日 09:59:50   作者:低調函數(shù)  
外觀模式為多個復雜的子系統(tǒng),提供了一個一致的界面,使得調用端只和這個接口發(fā)生調用,而無須關系這個子系統(tǒng)內部的細節(jié)。本文將通過示例詳細為大家講解一下外觀模式,需要的可以參考一下

一 定義

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

二 UML類圖

外觀模式是為了解決類與類之家的依賴關系的,像spring一樣,可以將類和類之間的關系配置到配置文件中,而外觀模式就是將他們的關系放在一個Facade類中,降低了類類之間的耦合度,該模式中沒有涉及到接口,看下類圖:(我們以一個計算機的啟動過程為例)

  • 外觀類(Facade):為調用端提供統(tǒng)一的調用接口,外觀類知道哪些子系統(tǒng)負責處理請求,從而將調用端的請求代理給適當子系統(tǒng)對象
  • 調用者(Client):外觀接口的調用者
  • 子系統(tǒng)的集合:指模塊或者子系統(tǒng),處理Facade 對象指派的任務,他是功能的實際提供者

三 代碼實例

外觀模式可以理解為轉換一群接口,客戶只要調用一個接口,而不用調用多個接口才能達到目的。比如:在 po

上安裝軟件的時候經(jīng)常有一鍵安裝選項(省去選擇安裝目錄、安裝的組件等等),還有就是手機的重啟功能(把關機和啟動合為一個操作)。

外觀模式就是解決多個復雜接口帶來的使用困難,起到簡化用戶操作的作用

示意圖說明

外觀(Facade)角色:為多個子系統(tǒng)對外提供一個共同的接口。

子系統(tǒng)(Sub System)角色:實現(xiàn)系統(tǒng)的部分功能,客戶可以通過外觀角色訪問它。

客戶(Client)角色:通過一個外觀角色訪問各個子系統(tǒng)的功能。

模式的實現(xiàn)

public class CPU {
	public void startup(){
		System.out.println("cpu startup!");
	}
	public void shutdown(){
		System.out.println("cpu shutdown!");
	}
}
public class Memory {
	public void startup(){
		System.out.println("memory startup!");
	}
	public void shutdown(){
		System.out.println("memory shutdown!");
	}
}
public class Disk {
	public void startup(){
		System.out.println("disk startup!");
	}
	public void shutdown(){
		System.out.println("disk shutdown!");
	}
}
public class Computer {
	private CPU cpu;
	private Memory memory;
	private Disk disk;
	public Computer(){
		cpu = new CPU();
		memory = new Memory();
		disk = new Disk();
	}
	public void startup(){
		System.out.println("start the computer!");
		cpu.startup();
		memory.startup();
		disk.startup();
		System.out.println("start computer finished!");
	}
	public void shutdown(){
		System.out.println("begin to close the computer!");
		cpu.shutdown();
		memory.shutdown();
		disk.shutdown();
		System.out.println("computer closed!");
	}
}
//測試
public class User {
	public static void main(String[] args) {
		Computer computer = new Computer();
		computer.startup();
		computer.shutdown();
	}
}

輸出結果如下:

start the computer!
cpu startup!
memory startup!
disk startup!
start computer finished!
begin to close the computer!
cpu shutdown!
memory shutdown!
disk shutdown!
computer closed!

如果我們沒有Computer類,那么,CPU、Memory、Disk他們之間將會相互持有實例,產(chǎn)生關系,這樣會造成嚴重的依賴,修改一個類,可能會帶來其他類的修改,這不是我們想要看到的,有了Computer類,他們之間的關系被放在了Computer類里,這樣就起到了解耦的作用,這,就是外觀模式!

四 外觀模式的優(yōu)缺點

外觀模式的特點:

外觀(Facade)模式是“迪米特法則”的典型應用,它有以下主要優(yōu)點:

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

外觀(Facade)模式的主要缺點如下:

  • 不能很好地限制客戶使用子系統(tǒng)類,很容易帶來未知風險。
  • 增加新的子系統(tǒng)可能需要修改外觀類或客戶端的源代碼,違背了“開閉原則”。

五 外觀模式的使用場景

通常在以下情況下可以考慮使用外觀模式。

  • 對分層結構系統(tǒng)構建時,使用外觀模式定義子系統(tǒng)中每層的入口點可以簡化子系統(tǒng)之間的依賴關系。
  • 當一個復雜系統(tǒng)的子系統(tǒng)很多時,外觀模式可以為系統(tǒng)設計一個簡單的接口供外界訪問。
  • 當客戶端與多個子系統(tǒng)之間存在很大的聯(lián)系時,引入外觀模式可將它們分離,從而提高子系統(tǒng)的獨立性和可移植性。

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

相關文章

  • spring使用RedisTemplate的操作類訪問Redis

    spring使用RedisTemplate的操作類訪問Redis

    本篇文章主要介紹了spring使用RedisTemplate的操作類訪問Redis,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Java批量操作文件系統(tǒng)的實現(xiàn)示例

    Java批量操作文件系統(tǒng)的實現(xiàn)示例

    文件上傳和下載是java web中常見的操作,本文主要介紹了Java批量操作文件系統(tǒng)的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-03-03
  • Java實現(xiàn)新建有返回值的線程的示例詳解

    Java實現(xiàn)新建有返回值的線程的示例詳解

    本文主要介紹了一個Java多線程的例題,題目是:使用ThreadLocal管理一號和二號線程,分別存入100元,在三號線程中使用利用一號和二號的計算結果來算出賬戶的實際金額。感興趣的可以了解一下
    2022-09-09
  • Java強制類型轉換的所有規(guī)則及說明

    Java強制類型轉換的所有規(guī)則及說明

    這篇文章主要介紹了Java強制類型轉換的所有規(guī)則及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 聊聊Java Double相加出現(xiàn)的怪事

    聊聊Java Double相加出現(xiàn)的怪事

    這篇文章主要介紹了Java Double相加出現(xiàn)的怪事,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java連接MySQL數(shù)據(jù)庫增刪改查的通用方法(推薦)

    Java連接MySQL數(shù)據(jù)庫增刪改查的通用方法(推薦)

    下面小編就為大家?guī)硪黄狫ava連接MySQL數(shù)據(jù)庫增刪改查的通用方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Spring框架學習之Spring?@Autowired實現(xiàn)自動裝配的代碼

    Spring框架學習之Spring?@Autowired實現(xiàn)自動裝配的代碼

    自動裝配就是說,你不用手動實現(xiàn)bean之間的組合關系,只要使用了@Autowired注解,程序就會自動的注入這個需要的bean,前提是你的Spring容器有這個bean,這篇文章主要介紹了Spring?@Autowired實現(xiàn)自動裝配,需要的朋友可以參考下
    2021-12-12
  • Spring整合Junit的使用詳解

    Spring整合Junit的使用詳解

    這篇文章主要介紹了Spring整合Junit的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • Spring Cloud 部署時使用 Kubernetes 作為注冊中心和配置中心的方法

    Spring Cloud 部署時使用 Kubernetes 作為注冊中心和配置中

    Spring Cloud Kubernetes提供了使用Kubernete本地服務的Spring Cloud通用接口實現(xiàn),這篇文章主要介紹了Spring Cloud 部署時如何使用 Kubernetes 作為注冊中心和配置中心,需要的朋友可以參考下
    2024-05-05
  • 詳解SpringBoot讀取resource目錄下properties文件的常見方式

    詳解SpringBoot讀取resource目錄下properties文件的常見方式

    這篇文章主要介紹了SpringBoot讀取resource目錄下properties文件的常見方式,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02

最新評論

九龙县| 紫金县| 榆林市| 岳普湖县| 巴东县| 齐河县| 新乡县| 遂宁市| 南川市| 高唐县| 定远县| 桦甸市| 营口市| 宁蒗| 彝良县| 界首市| 张北县| 石门县| 黑河市| 波密县| 定南县| 山西省| 安顺市| 云和县| 新闻| 叶城县| 德化县| 永登县| 德安县| 格尔木市| 平顺县| 晋江市| 鹤山市| 夏河县| 滕州市| 铜鼓县| 天全县| 安化县| 利川市| 双牌县| 醴陵市|