Java设计模式之外观模式示例详解

网友投稿 289 2022-10-25

Java设计模式之外观模式示例详解

目录定义案例需求方案:外观模式实现分析总结

定义

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

案例

需求

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

方案:外观模式实现

定义播放器类

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("放http://下屏幕,打开投影仪");

}

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(){

SysttRnBvIZsGem.out.println("关闭音响");

}

public void setVolume(){

System.out.println("调节音响音量");

tRnBvIZsG }

}

定义爆米花机类

/**

* 爆米花机

* @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();

}

}

查看测试结果

分析

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

总结

优势:

1.外观模式对外屏蔽了子系统的实现细节(安全性)

2.外观模式降低了客户端与子系统交互的复杂性,对客户端和子系统进行解耦合,子系统内部的模块更容易维护和扩展

3.通过合理的使用外观模式,可以帮助我们更好的划分访问层次

使用场景

1.对分层的系统进行构建时,使用外观模式可以简化子系统之间的依赖关系

2.当有一个复杂的系统,里面有很多子系统,有大量的操作,这时候可以使用外观模式

3.当客户端与多个子系统之间存在很多耦合时,引入外观模式,可以将他们分离,提高子系统的独立性和可移植性

以上就是java设计模式之外观模式示例详解的详细内容,更多关于Java外观模式的资料请关注我们其它相关文章!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:基于 Docker 的微服务架构实践
下一篇:网线接口的概念及作用说明
相关文章

 发表评论

暂时没有评论,来抢沙发吧~