自己做公众号和小说网站推广,国内做外贸网站的有哪些,wordpress 克隆,如何在阿里云主机安装wordpress引言
外观模式#xff08;Facade Pattern#xff09;#xff0c;又叫“过程模式”。外观模式为子系统中的一组接口提供一个一致的入口#xff0c;此模式定义了一个高层接口#xff0c;这个接口使得这一组子系统更加易用。
一、案例分析
生活中有很多类似的案例#xf…引言
外观模式Facade Pattern又叫“过程模式”。外观模式为子系统中的一组接口提供一个一致的入口此模式定义了一个高层接口这个接口使得这一组子系统更加易用。
一、案例分析
生活中有很多类似的案例比如驾驶员驾驶汽车只需要操作方向盘、档杆、离合器、刹车、油门这几个主要接口而汽车内部的一组操作则不需要驾驶员考虑比如驾驶员踩刹车后车子就会停下来而系统内部实际上通过“刹车”这一接口经过一系列的机械传动到达刹车片。
再比如一套豪华的家庭影院用户只需要简单点击遥控器上的“开始”按钮一系列诸如关闭窗帘、打开投影仪、打开音响、放下屏幕就都可以自动完成。
二、外观模式类图
以家庭影院案例为参考遥控器或操作界面提供了统一的外观接口接口组装了一系列子系统运行动作 三、代码实现
窗帘子系统
public class Curtain {public void up() {System.out.println(窗帘升起...);}public void down() {System.out.println(窗帘降下...);}
}
音响子系统
public class Sound {public void on() {System.out.println(打开音响...);}public void off() {System.out.println(关闭音响...);}
}
播放器
public class Player {public void play() {System.out.println(开始播放...);}public void pause() {System.out.println(暂停播放...);}public void stop() {System.out.println(退出播放器...);}
}
投影仪子系统
public class Projector {private Player player;public void init(Player player) {this.player player;}public void on() {System.out.println(打开投影机...);player.play();}public void off() {player.stop();System.out.println(关闭投影机...);}
}
家庭影院外观类
public class HomeTheatre {private Curtain curtain;private Projector projector;private Player player;private Sound sound;public HomeTheatre(Curtain curtain, Projector projector, Player player, Sound sound) {super();this.curtain curtain;this.projector projector;this.player player;this.sound sound;}/** 一键启动*/public void start() {curtain.down();projector.init(player);sound.on();projector.on();}/** 暂停播放*/public void pause() {player.pause();}/** 退出家庭影院*/public void exitAll() {curtain.up();sound.off();projector.off();}
}
Client调用端
public class Client {public static void main(String[] args) {HomeTheatre homeTheatre new HomeTheatre(new Curtain(), new Projector(), new Player(), new Sound());System.out.println(-----打开家庭影院------);homeTheatre.start();System.out.println(-----暂停播放------);homeTheatre.pause();System.out.println(-----退出家庭影院------);homeTheatre.exitAll();}
}
执行结果
-----打开家庭影院------
窗帘降下...
打开音响...
打开投影机...
开始播放...
-----暂停播放------
暂停播放...
-----退出家庭影院------
窗帘升起...
关闭音响...
退出播放器...
关闭投影机...
总结
外观模式就是把一部分基础功能一致的代码抽离到单独的子模块中然后在外观类中聚合使用或者在设计之初就将业务流设计为多个子系统组合的流水线式无论哪种方式外观模式都会让代码的执行逻辑一目了然。
如果过去只是把一堆业务逻辑全部放到一个类中去写那这只能算得上是面向过程编程。如果你能够把一些代码提出到多个类中去然后依赖它们的话就成了高大上的外观模式。
外观模式虽然极容易理解但是它并不符合开闭原则也不要盲目使用。
在Spring 容器环境的初始化阶段就用到了外观模式一步一步地执行各个子系统的初始化工作。