本篇内容介绍了“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("放下屏幕,打开投影仪");
}
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();
}
}
查看测试结果
我们通过家庭影院外观类HomeTheaterFacade的ready,play,end方法操作了播放器,投影仪等的打开,关闭,对于家庭影院外观类来说,他是不需要知道播放器,投影仪等的打开,关闭具体是怎么样实现的。在一定程度上实现了解耦,易维护和扩展。
优势:
1.外观模式对外屏蔽了子系统的实现细节(安全性)
2.外观模式降低了客户端与子系统交互的复杂性,对客户端和子系统进行解耦合,子系统内部的模块更容易维护和扩展
3.通过合理的使用外观模式,可以帮助我们更好的划分访问层次
使用场景
1.对分层的系统进行构建时,使用外观模式可以简化子系统之间的依赖关系
2.当有一个复杂的系统,里面有很多子系统,有大量的操作,这时候可以使用外观模式
3.当客户端与多个子系统之间存在很多耦合时,引入外观模式,可以将他们分离,提高子系统的独立性和可移植性
“Java外观模式示例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。