没有看到外观模式的具体实现可能大家对外观模式没有了解。但是事实上,外观模式在我们平常项目中都用的很多,只是我们并不知道它其实是属于外观模式中的一种。
应用场景:
有时候我们需要实现几个不同的功能,这几个功能又事相互独立开的。此时我们想要去对他们进行操作每次都需要操作其本身对象,这样很麻烦。就好比,我们在看电视的时候需要开关按钮、调节频道的按钮、音量按钮。此时,如果我们没有遥控器,我们每次去操作一个功能就需要一个不同的设备,这会显得麻烦。而有了遥控器,我们可以通过一个遥控器来实现这些功能。这样就方便了很多。而这个遥控器就是外观类,它简化了类与类之间的交互,对类之间有解耦合的作用。
示例:
开关:
public class Power {
public void setPower(){
System.out.println("控制电源");
}
}
音量:
public class Volume {
public void setVolume(){
System.out.println("设置音量");
}
}
调节频道:
public class Channel {
public void setChannel(){
System.out.println("设置频道");
}
}
外观类(遥控器):
public class FacadeController {
Channel channel;
Power power;
Volume volume;
public FacadeController() {
channel = new Channel();
power = new Power();
volume = new Volume();
}
public void setChannel(){
channel.setChannel();
}
public void setPower(){
power.setPower();
}
public void setVolume(){
volume.setVolume();
}
}
使用测试:
public class FacadeTest {
public static void main(String[] args) {
//没有外观模式
Power power = new Power();
Channel ch = new Channel();
Volume volume = new Volume();
power.setPower();
ch.setChannel();
volume.setVolume();
//有了外观模式
FacadeController controller = new FacadeController();
controller.setPower();
controller.setChannel();
controller.setVolume();
}
}
结果:
控制电源
设置频道
设置音量
控制电源
设置频道
设置音量
从最后的使用方面来说,差别很明显,没有外观类和有了外观类结果是相同的,但是没有外观类的时候,我们的操作明显更加复杂,而且当功能扩展的时候,问题就更加的多。而外观类给我们解决了这个问题,减少了我们对不同类的直接操作。