设计模式--外观模式
创始人
2024-12-26 03:10:43
0

外观模式(Facade Pattern)

外观模式(Facade Pattern)是一种结构型设计模式,它为子系统中的一组接口提供了一个一致的界面。外观模式定义了一个高层接口,使得子系统更加容易使用。它主要用于简化复杂系统的接口,提供一个简洁的接口给客户端使用,而隐藏系统的复杂性。

外观模式的优点

  1. 简化接口:通过提供一个统一的接口,外观模式简化了子系统的使用。
  2. 降低耦合:客户端不需要了解子系统的具体实现,从而减少了客户端与子系统之间的耦合。
  3. 更好的划分访问层次:通过引入外观模式,可以让子系统内部模块更容易维护和扩展。

外观模式的结构

外观模式涉及以下角色:

  1. Facade(外观类):提供一个高层接口,供客户端调用。
  2. Subsystem classes(子系统类):一组类,它们实现子系统的功能,外观类会调用它们来完成客户端请求。

示例代码

假设我们有一个家庭影院系统,包括灯光控制、音响系统、投影仪和播放器。通过外观模式,我们可以创建一个外观类来简化这些子系统的操作。

子系统类
class Light {     public void on() {         System.out.println("灯光打开");     }      public void off() {         System.out.println("灯光关闭");     } }  class SoundSystem {     public void on() {         System.out.println("音响系统打开");     }      public void off() {         System.out.println("音响系统关闭");     }      public void setVolume(int volume) {         System.out.println("设置音量到 " + volume);     } }  class Projector {     public void on() {         System.out.println("投影仪打开");     }      public void off() {         System.out.println("投影仪关闭");     }      public void setInput(String input) {         System.out.println("设置输入源为 " + input);     } }  class Player {     public void on() {         System.out.println("播放器打开");     }      public void off() {         System.out.println("播放器关闭");     }      public void play(String movie) {         System.out.println("播放电影: " + movie);     } } 
 外观类
class HomeTheaterFacade {     private Light light;     private SoundSystem soundSystem;     private Projector projector;     private Player player;      public HomeTheaterFacade(Light light, SoundSystem soundSystem, Projector projector, Player player) {         this.light = light;         this.soundSystem = soundSystem;         this.projector = projector;         this.player = player;     }      public void watchMovie(String movie) {         System.out.println("准备看电影...");         light.off();         soundSystem.on();         soundSystem.setVolume(10);         projector.on();         projector.setInput("HDMI");         player.on();         player.play(movie);         System.out.println("电影开始!");     }      public void endMovie() {         System.out.println("关闭家庭影院系统...");         light.on();         soundSystem.off();         projector.off();         player.off();         System.out.println("家庭影院系统已关闭!");     } } 

客户端代码

public class FacadePatternDemo {     public static void main(String[] args) {         Light light = new Light();         SoundSystem soundSystem = new SoundSystem();         Projector projector = new Projector();         Player player = new Player();          HomeTheaterFacade homeTheater = new HomeTheaterFacade(light, soundSystem, projector, player);         homeTheater.watchMovie("Inception");         homeTheater.endMovie();     } } 

输出结果

准备看电影...
灯光关闭
音响系统打开
设置音量到 10
投影仪打开
设置输入源为 HDMI
播放器打开
播放电影: Inception
电影开始!
关闭家庭影院系统...
灯光打开
音响系统关闭
投影仪关闭
播放器关闭
家庭影院系统已关闭!

解释

  1. 子系统类Light, SoundSystem, Projector, Player 分别表示家庭影院系统的各个子系统。
  2. 外观类HomeTheaterFacade 提供了简化的接口,通过组合调用子系统的方法来实现更复杂的操作,如 watchMovieendMovie
  3. 客户端FacadePatternDemo 中的客户端代码通过 HomeTheaterFacade 类来控制家庭影院系统,而不需要直接与各个子系统交互。

适用场景

  1. 简化复杂系统的使用:当一个系统非常复杂或者有很多子系统时,可以使用外观模式来提供一个简单的接口,方便客户端使用。
  2. 解耦系统与客户端:通过外观模式,客户端不需要了解系统的内部细节,从而降低系统与客户端之间的耦合度。
  3. 层次化系统设计:外观模式可以帮助你划分系统的层次,使得每一层次只与相邻的层次交互,从而提高系统的可维护性。

通过使用外观模式,我们可以隐藏系统的复杂性,提供一个简洁的接口给客户端使用,从而提高系统的可维护性和可扩展性

 

相关内容

热门资讯

今天下午!广西老友玩插件,wp... 今天下午!广西老友玩插件,wpk透视工作室(透视)确实是真的有辅助方法(哔哩哔哩)在进入广西老友玩插...
针对!玉海楼茶苑价格表,新天道... 针对!玉海楼茶苑价格表,新天道大厅辅助(竟然有挂神器)-哔哩哔哩1、全新机制【玉海楼茶苑价格表ai辅...
透视系统"决战卡五星... 透视系统"决战卡五星必赢神器"都是存在有辅助app(哔哩哔哩)1)决战卡五星必赢神器有没有挂:进一步...
经调查!万能透视辅助器免费版,... 经调查!万能透视辅助器免费版,德州来玩辅助器(透视)果然真的是有辅助技巧(哔哩哔哩)1、很好的工具软...
来临!如何下载微信小程序雀神挂... 来临!如何下载微信小程序雀神挂件,hhpoker有没有作比(好像存在有器)-哔哩哔哩1、任何如何下载...
教程辅助挂"游戏茶苑... 教程辅助挂"游戏茶苑辅助"切实存在有辅助教程(哔哩哔哩)1、下载好游戏茶苑辅助正确养号方法之后点击打...
截至目前!来来云南辅助,智星德... 截至目前!来来云南辅助,智星德州辅助译码插件靠谱吗(透视)都是真的有辅助方法(哔哩哔哩)1)智星德州...
备受关注的!全民比鸡脚本,开心... 备受关注的!全民比鸡脚本,开心泉州小程序辅助哪里查看(都是存在有挂)-哔哩哔哩1、备受关注的!全民比...
透视免费"功夫川嘛辅... 您好,功夫川嘛辅助器是真的假的这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302...
连日来!乐驿茶坊辅助器下载,a... 连日来!乐驿茶坊辅助器下载,aapoker公共底牌(透视)切实真的有辅助工具(哔哩哔哩)1、起透看视...