快捷搜索:  汽车  科技

java 混合设计模式:Java设计模式

java 混合设计模式:Java设计模式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(); } } 查看测试结果public class HomeTheaterFacade { // 聚合各个子系统 private

定义

外观模式为多个复杂的子系统,提供了一个一致的界面,使得调用端只和这个接口发生调用,而无须关系这个子系统内部的细节

案例需求

看电影的时候需要进行一系列的操作,比如打开播放器,放下屏幕,打开投影仪,打开音响等,这个要怎么进行管理呢

方案:外观模式实现

定义播放器类

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("调节投影仪焦距"); } 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("调节音响音量"); } }

定义爆米花机类

/** * 爆米花机 * @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 { // 聚合各个子系统 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(); } }

查看测试结果

java 混合设计模式:Java设计模式(1)

分析

我们通过家庭影院外观类HomeTheaterFacade的ready play end方法操作了播放器,投影仪等的打开,关闭,对于家庭影院外观类来说,他是不需要知道播放器,投影仪等的打开,关闭具体是怎么样实现的。在一定程度上实现了解耦,易维护和扩展。

总结

优势:

  • 外观模式对外屏蔽了子系统的实现细节(安全性)
  • 外观模式降低了客户端与子系统交互的复杂性,对客户端和子系统进行解耦合,子系统内部的模块更容易维护和扩展
  • 通过合理的使用外观模式,可以帮助我们更好的划分访问层次

使用场景

  • 对分层的系统进行构建时,使用外观模式可以简化子系统之间的依赖关系
  • 当有一个复杂的系统,里面有很多子系统,有大量的操作,这时候可以使用外观模式
  • 当客户端与多个子系统之间存在很多耦合时,引入外观模式,可以将他们分离,提高子系统的独立性和可移植性

如需获取源码,请关注后,私信发送"源码"给小编,非常感谢

猜您喜欢: