Java設計模式之外觀模式示例詳解
定義
外觀模式為多個復雜的子系統(tǒng),提供了一個一致的界面,使得調(diào)用端只和這個接口發(fā)生調(diào)用,而無須關系這個子系統(tǒng)內(nèi)部的細節(jié)
案例
需求
看電影的時候需要進行一系列的操作,比如打開播放器,放下屏幕,打開投影儀,打開音響等,這個要怎么進行管理呢
方案:外觀模式實現(xiàn)
定義播放器類
public class Player {
private static Player player = new Player();
private Player(){}
public static Player getInstance(){
return player;
}
public void on(){
System.out.println("打開播放器");
}
public void off(){
System.out.println("關閉播放器");
}
public void play(){
System.out.println("使用播放器播放電影");
}
public void pause(){
System.out.println("暫停播放器");
}
public void select(){
System.out.println("選擇喜歡的電影");
}
}定義投影儀類
public class Projector {
private static Projector projector = new Projector();
private Projector(){}
public static Projector getInstance(){
return projector;
}
public void on(){
System.out.println("放下屏幕,打開投影儀");
}
public void off(){
System.out.println("關閉投影儀");
}
public void focus(){
System.out.println("調(diào)節(jié)投影儀焦距");
}
public void zoom(){
System.out.println("投影儀變焦");
}
}定義音響類
public class Stereo {
private static Stereo stereo = new Stereo();
private Stereo(){}
public static Stereo getInstance(){
return stereo;
}
public void on(){
System.out.println("打開音響");
}
public void off(){
System.out.println("關閉音響");
}
public void setVolume(){
System.out.println("調(diào)節(jié)音響音量");
}
}定義爆米花機類
/**
* 爆米花機
* @author:liyajie
* @createTime:2022/3/2 14:24
* @version:1.0
*/
public class Popcorn {
private static Popcorn popcorn = new Popcorn();
private Popcorn(){}
public static Popcorn getInstance(){
return popcorn;
}
public void on(){
System.out.println("打開爆米花機");
}
public void off(){
System.out.println("關閉爆米花機");
}
public void pop(){
System.out.println("制作爆米花");
}
}定義家庭影院外觀類
public class HomeTheaterFacade {
// 聚合各個子系統(tǒng)
private Player player;
private Popcorn popcorn;
private Projector projector;
private Stereo stereo;
public HomeTheaterFacade(){
}
// 全參構造器
public HomeTheaterFacade(Player player, Popcorn popcorn,Projector projector,Stereo stereo){
this.player = player;
this.popcorn = popcorn;
this.projector = projector;
this.stereo = stereo;
}
// 準備階段
public void ready(){
popcorn.on();
player.on();
projector.on();
stereo.on();
}
// 播放
public void play(){
player.select();
popcorn.pop();
projector.focus();
stereo.setVolume();
}
// 結束
public void end(){
player.off();
popcorn.off();
projector.off();
stereo.off();
}
}定義測試類
public class Test {
public static void main(String[] args) {
HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade(Player.getInstance(),Popcorn.getInstance(),Projector.getInstance(),Stereo.getInstance());
homeTheaterFacade.ready();
homeTheaterFacade.play();
homeTheaterFacade.end();
}
}查看測試結果

分析
我們通過家庭影院外觀類HomeTheaterFacade的ready,play,end方法操作了播放器,投影儀等的打開,關閉,對于家庭影院外觀類來說,他是不需要知道播放器,投影儀等的打開,關閉具體是怎么樣實現(xiàn)的。在一定程度上實現(xiàn)了解耦,易維護和擴展。
總結
優(yōu)勢:
1.外觀模式對外屏蔽了子系統(tǒng)的實現(xiàn)細節(jié)(安全性)
2.外觀模式降低了客戶端與子系統(tǒng)交互的復雜性,對客戶端和子系統(tǒng)進行解耦合,子系統(tǒng)內(nèi)部的模塊更容易維護和擴展
3.通過合理的使用外觀模式,可以幫助我們更好的劃分訪問層次
使用場景
1.對分層的系統(tǒng)進行構建時,使用外觀模式可以簡化子系統(tǒng)之間的依賴關系
2.當有一個復雜的系統(tǒng),里面有很多子系統(tǒng),有大量的操作,這時候可以使用外觀模式
3.當客戶端與多個子系統(tǒng)之間存在很多耦合時,引入外觀模式,可以將他們分離,提高子系統(tǒng)的獨立性和可移植性
以上就是Java設計模式之外觀模式示例詳解的詳細內(nèi)容,更多關于Java外觀模式的資料請關注腳本之家其它相關文章!
相關文章
java計算給定字符串中出現(xiàn)次數(shù)最多的字母和該字母出現(xiàn)次數(shù)的方法
這篇文章主要介紹了java計算給定字符串中出現(xiàn)次數(shù)最多的字母和該字母出現(xiàn)次數(shù)的方法,涉及java字符串的遍歷、轉換及運算相關操作技巧,需要的朋友可以參考下2017-02-02
如何設置IDEA遠程連接服務器開發(fā)環(huán)境并結合cpolar實現(xiàn)ssh遠程開發(fā)(最新推薦)
本文主要介紹如何在IDEA中設置遠程連接服務器開發(fā)環(huán)境,并結合Cpolar內(nèi)網(wǎng)穿透工具實現(xiàn)無公網(wǎng)遠程連接,然后實現(xiàn)遠程Linux環(huán)境進行開發(fā),感興趣的朋友跟隨小編一起看看吧2024-03-03
spring?boot?mybatis日志輸出到控制臺的方法實踐
在開發(fā)過程中我們往往需要打印出SQL語句,這樣就方便我們監(jiān)控問題,本文主要介紹了spring?boot?mybatis日志輸出到控制臺的方法實踐,具有一定的參考價值,感興趣的可以了解一下2024-05-05
JavaWeb JDBC + MySql 通訊錄實現(xiàn)簡單的增刪改查功能案例詳解
這篇文章主要介紹了JavaWeb JDBC + MySql 通訊錄實現(xiàn)簡單的增刪改查功能,結合具體案例形式詳細分析了JavaWeb JDBC + MySql數(shù)據(jù)庫連接、增刪改查等相關操作技巧與注意事項,需要的朋友可以參考下2019-08-08

