<设计模式10>外观模式

来源:互联网 发布:阿里云 centos7 lnmp 编辑:程序博客网 时间:2024/05/16 10:41

没有看到外观模式的具体实现可能大家对外观模式没有了解。但是事实上,外观模式在我们平常项目中都用的很多,只是我们并不知道它其实是属于外观模式中的一种。

应用场景:

有时候我们需要实现几个不同的功能,这几个功能又事相互独立开的。此时我们想要去对他们进行操作每次都需要操作其本身对象,这样很麻烦。就好比,我们在看电视的时候需要开关按钮、调节频道的按钮、音量按钮。此时,如果我们没有遥控器,我们每次去操作一个功能就需要一个不同的设备,这会显得麻烦。而有了遥控器,我们可以通过一个遥控器来实现这些功能。这样就方便了很多。而这个遥控器就是外观类,它简化了类与类之间的交互,对类之间有解耦合的作用。

示例:

开关:

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();    }}

结果:

控制电源
设置频道
设置音量
控制电源
设置频道
设置音量

从最后的使用方面来说,差别很明显,没有外观类和有了外观类结果是相同的,但是没有外观类的时候,我们的操作明显更加复杂,而且当功能扩展的时候,问题就更加的多。而外观类给我们解决了这个问题,减少了我们对不同类的直接操作。


0 0