外观模式
Posted colinzh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了外观模式相关的知识,希望对你有一定的参考价值。
模式定义
提供了一个统一的接口,用于访问子系统中的一群接口,外观定义了一个高层接口,让子系统更容易使用。
示例
家庭影院看电影涉及到灯,DVD还有屏幕等对象,每个对象中都提供不同的操作该对象的方法。如果使用子对象去实现看电影的操作这样涉及到的对象很多,而且和子对象完全耦合在一起了。所以需要使用外观模式进行子对象的封装处理,我们调用就调用外观模式中提供的统一方法,实现和子系统中的解耦操作。
/**
* DVD
*
* @author Colin
* @create 2018-05-10
**/
public class DvdPlayer {
public void on(){
System.out.println("打开DVD");
}
public void off(){
System.out.println("关闭DVD");
}
}
/**
* 灯具
*
* @author Colin
* @create 2018-05-10
**/
public class Light {
public void on(){
System.out.println("开灯");
}
public void off(){
System.out.println("关灯");
}
}
/**
* 屏幕
*
* @author Colin
* @create 2018-05-10
**/
public class Screen {
public void on(){
System.out.println("打开屏幕");
}
public void off(){
System.out.println("关闭屏幕");
}
}
/**
* 家庭影院
*
* @author Colin
* @create 2018-05-10
**/
public class HomeMovieFacade {
private DvdPlayer dvdPlayer;
private Light light;
private Screen screen;
public HomeMovieFacade(DvdPlayer dvdPlayer,Light light,Screen screen){
this.dvdPlayer=dvdPlayer;
this.light=light;
this.screen=screen;
}
public void watchMovie(){
light.off();
dvdPlayer.on();
screen.on();
}
}
总结
- 外观模式将客户从复杂的子系统中解耦出来
实现一个外观需要将子系统组合进外观中,然后将工作委托给子系统执行
涉及原则
最少知识原则,不要让太多的类耦合在一起,免得修改其中一部分会影响到其他部分。
以上是关于外观模式的主要内容,如果未能解决你的问题,请参考以下文章