外观模式(将一个场景中的功能进行封装)
场景:家庭影院
使用DVD,音响等设备的功能
传统方案:创建对应的对象直接使用
外观模式:提供一个统一的客户端来调用这些设备
完成一个功能需要许多组件配合完成,如果我们直接在main方法写回显得杂乱无章。我们可以将实现的每一个功能封装到一个外观类中,由这个外观类来负责完成这个场景的具体功能,而客户端通过调用外观类的方法来完成具体的的功能。这里外观类起到协调组件配合使用的功能
实现
其实下面这个一看就知道什么意思了,实现一个功能需要多个组件配合使用,我们可以把这个流程封装起来,等我们需要使用的时候直接调用这个方法即可,把这个场景所有涉及到的功能都实现出来就是我们的外观模式
public class HomeTheaterFacade {
Player player=Player.getPlayer();
Screen screen=Screen.getScreen();
void start(){
screen.on();
player.on();
}
void pause(){
player.pause();
}
void restart(){
player.restart();
}
void off(){
screen.off();
player.end();
}
}
调用外观类实现功能:
public class Client {
public static final HomeTheaterFacade client=new HomeTheaterFacade();
public static void main(String[] args) {
client.start();
client.pause();
client.restart();
client.off();
}
}
这样当我们需要多次使用某一功能时,代码量也会减少,功能内部需要增添一些细节时也会很方便
外观模式主要是为了让系统更有层次,更利于维护,如果子系统的功能已经足够简单则不需要使用外观模式。外观模式使用得过多和过少都不好,需要我们灵活处理。