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

歡迎訪問 生活随笔!

生活随笔

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

java

Java 设计模式之外观模式

發(fā)布時間:2024/9/30 java 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 设计模式之外观模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、了解外觀模式

1.1 什么是外觀模式

外觀模式 (Facade Pattern) 提供了一個統(tǒng)一的接口,用來訪問子系統(tǒng)中的一群接口。外觀定義了一個高層接口,讓子系統(tǒng)更容易使用。

想要使用外觀模式,我們需要創(chuàng)建一個接口來簡化和統(tǒng)一包裝一個子系統(tǒng)的一個或多個類。外觀模式允許我們讓客戶和子系統(tǒng)之間避免緊耦合。

1.2 外觀模式的組成結(jié)構

  • 客戶 (Client):通過調(diào)用 Facede 來完成要實現(xiàn)的功能。
  • 外觀 (Facade):外觀模式的核心。它被客戶角色調(diào)用,它熟悉子系統(tǒng)的功能。內(nèi)部根據(jù)客戶角色的需求預定了幾種功能的組合。
  • 復雜的子系統(tǒng):實現(xiàn)了子系統(tǒng)的功能。它對客戶角色和 Facade 是未知的。它內(nèi)部可以有系統(tǒng)內(nèi)的相互交互,也可以由供外界調(diào)用的接口。

1.3 外觀模式 UML 圖解

1.4 外觀模式適用場景

  • 設計初期階段,應該有意識的將不同層分離,層與層之間建立外觀模式。
  • 開發(fā)階段,子系統(tǒng)越來越復雜,增加外觀模式提供一個簡單的調(diào)用接口。
  • 維護一個大型遺留系統(tǒng)的時候,可能這個系統(tǒng)已經(jīng)非常難以維護和擴展,但又包含非常重要的功能,為其開發(fā)一個外觀類,以便新系統(tǒng)與其交互。

二、外觀模式具體應用

2.1 問題描述

看電影:大部分人應該都喜歡看電影,我們來想一下我們?nèi)ル娪霸嚎措娪?#xff0c;從坐下座位后都是需要哪些步驟。首先在電影沒有正式放映之前會先放一會兒廣告;然后將燈光調(diào)暗;接著后臺播放器播放對應的 DVD,電影正式播放;當電影播放完畢后就是將燈光調(diào)回明亮;關閉播放器。

2.2 偽代碼模擬過程

ads.on(); // 電影未開始之前,放映一會兒廣告ads.close(); // 電影快開始時,關閉廣告light.dim(10); // 將燈光的亮度調(diào)到 10%dvdPlayer.on(dvd); // 播放器播放對應的 DVDlight.dim(100); // 電影結(jié)束后,將燈光亮度調(diào)到 100%dvdPlayer.close(); // 關閉播放器

上面這種方式,用代碼模擬電影院的步驟變得很復雜。我們可以使用外觀模式,把這些復雜的步驟封裝起來,只對外提供簡單的方法。

2.3 外觀模式設計圖

2.4 外觀模式代碼實現(xiàn)

子系統(tǒng)廣告 Advertisement 類

package com.jas.facade;public class Advertisement {void on(){System.out.println("現(xiàn)在開始播放廣告,電影即將開始播放!");}void close(){System.out.println("廣告播放結(jié)束!");} }

子系統(tǒng)燈光 Light 類

package com.jas.facade;public class Light {void dim(int brightness){System.out.println("調(diào)整燈光亮度為:" + brightness + "%!");} }

子系統(tǒng)播放器 DVDPlayer 類

package com.jas.facade;public class DVDPlayer {void on(String dvd){System.out.println("現(xiàn)在開始播放電影,觀看的電影是" + dvd + "!");}void close(){System.out.println("電影播放結(jié)束,請大家按秩序退場,關閉播放器!");} }

外觀 TheaterFacade 類

package com.jas.facade;public class TheaterFacade {Advertisement ads;Light light;DVDPlayer dvdPlayer;public TheaterFacade(Advertisement ads, Light light, DVDPlayer dvdPlayer){this.ads = ads;this.light = light;this.dvdPlayer = dvdPlayer;}void watchMovie(String dvd){ads.on();ads.close();light.dim(10);dvdPlayer.on(dvd);}void endMovie(){light.dim(100);dvdPlayer.close();} }

客戶類

package com.jas.facade;public class TheaterTestDrive {public static void main(String[] args) {Advertisement ads = new Advertisement();Light light = new Light();DVDPlayer dvdPlayer = new DVDPlayer();TheaterFacade facade = new TheaterFacade(ads, light, dvdPlayer);facade.watchMovie("復仇者聯(lián)盟×");facade.endMovie();} }/*** 輸出* 現(xiàn)在開始播放廣告,電影即將開始播放!* 廣告播放結(jié)束!* 調(diào)整燈光亮度為:10%!* 現(xiàn)在開始播放電影,觀看的電影是復仇者聯(lián)盟×!* 調(diào)整燈光亮度為:100%!* 電影播放結(jié)束,請大家按秩序退場,關閉播放器!*/

三、 外觀模式總結(jié)

3.1 外觀模式優(yōu)點

  • 實現(xiàn)了子系統(tǒng)與客戶端之間的松耦合關系。
  • 客戶端屏蔽了子系統(tǒng)組件,減少了客戶端所需處理的對象數(shù)目,并使得子系統(tǒng)使用起來更加容易。

3.2 外觀模式知識點總結(jié)

  • 當需要簡化并統(tǒng)一一個很大的接口或者一個復雜的接口時,可以使用外觀。
  • 外觀將客戶從一個復雜的子系統(tǒng)中解耦。
  • 實現(xiàn)一個外觀,需要將子系統(tǒng)組合進外觀中,然后具體的工作委托給子系統(tǒng)執(zhí)行。

PS:點擊了解更多設計模式 http://blog.csdn.net/codejas/article/details/79236013

參考文獻

《Head First 設計模式》

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。