三分钟学会门面模式!

【强制】应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架SLF4J 中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一

不知道大家有没有了解过门面模式,我去翻了一下《设计模式之禅》,发现非常简单,所以在这给大家分享一下。

一、门面(外观)模式介绍

1.1门面模式现实例子

一个电源总开关可以控制所有电器的打开或关闭状态。

无论是空调、冰箱、电视、电脑、风扇等等,只要是电器都受这个电闸控制。只要这个电闸将关闭,所有的电器都会受到牵连(一同关闭)。

电源总开关(电闸)即为该系统的外观模式设计。

1.2回到代码世界

比如,我们家里现在有空调、冰箱、电脑这么几个电器

  1. // 冰箱

  2. publicclassFridge{

  3.    // 关闭冰箱

  4.    publicvoid turnOff(){

  5.    }

  6.    // 开冰箱灯..减低冰箱温度..调高冰箱温度...

  7. }

  8. // 电视

  9. publicclassTelevision{

  10.    // 关闭电视

  11.    publicvoid turnOffTV(){

  12.        System.out.println("关闭电视");

  13.    }

  14.    // 切换电视节目..减低电视声音..调高电视声音...

  15.    publicvoid doSomething(){

  16.        System.out.println("切换电视节目..减低电视声音..调高电视声音...");

  17.    }

  18. }

  19. // 电脑

  20. publicclassComputer{

  21.    // 关闭电脑

  22.    publicvoid turnOffComputer(){

  23.        System.out.println("关闭电脑");

  24.    }

  25.    // 使用电脑干别的事~

  26.    publicvoid doSomething(){

  27.        System.out.println("使用电脑干别的事~");

  28.    }

  29. }

如果没有电闸的的情况下,我想将上面的电器关闭掉,我需要这样干:

  1.    // 我要关闭电视、电脑、空调

  2.    publicstaticvoid main(String[] args){

  3.        newComputer().turnOffComputer();

  4.        newFridge().turnOffFridge();

  5.        newTelevision().turnOffTV();

  6.        // 当然了,一个正常的家庭不单单只有这么点电器的。

  7.        // 如果某一天我想关闭家里所有的电器,就需要重复new 个对象,调用其turn offer方法

  8.    }

一个一个关是不是很麻烦,所以我们就有了电闸:

  1. // 电闸

  2. publicclassElectricBrake{

  3.    privateComputer computer =newComputer();

  4.    privateFridge fridge =newFridge();

  5.    privateTelevision television =newTelevision();

  6.    // 关闭所有电器

  7.    publicvoid turnOffAll(){

  8.        computer.turnOffComputer();

  9.        fridge.turnOffFridge();

  10.        television.turnOffTV();

  11.    }

  12. }

当我们想关闭所有电器的时候,我们可以使用电闸来关闭。

  1.    // 我要关闭所有电器

  2.    publicstaticvoid main(String[] args){

  3.        ElectricBrake brake =newElectricBrake();

  4.        brake.turnOffAll();

  5.    }

有经验的同学可能就会想,这不就再封装了一层吗??这就是门面模式啦??嗯,没错,这就是门面模式

1.3门面模式介绍

《设计模式之禅》:

要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。

门面模式的通用类图十分简单:

按照我们的例子,子系统就相当于电脑、冰箱、电视。统一的对象就相当于我们的电闸。我们通过电闸来对所有电器进行关闭(使得不用逐个逐个找电脑、冰箱、电视来关闭)

使用了门面模式,使客户端调用变得更加简单

1.4门面模式的优缺点

优点:

  1. 减少系统的相互依赖。使用门面模式,所有的依赖都是对门面对象的依赖,与子系统无关

  2. 提高了灵活性。不管子系统内部如何变化,只要不影响门面对象,任你自由活动。

缺点:

  1. 不符合开闭原则,对修改关闭,对扩展开放。比如我们上面的例子,如果有新电器要想要加入一次关闭的队伍中,只能在门面对象上修改 turnOffAll()方法的代码。

最后

是不是觉得门面设计模式就那么一回事了?说白了就是对子系统封装了一层,给予了一个高层次的接口(门面对象),进而方便客户端调用。

推荐阅读和参考资料:

  • 《设计模式之禅》

  • https://blog.csdn.net/hguisu/article/details/7533759

  • https://www.cnblogs.com/lthIU/p/5860607.html

本站所有文章均由网友分享,仅用于参考学习用,请勿直接转载,如有侵权,请联系网站客服删除相关文章。若由于商用引起版权纠纷,一切责任均由使用者承担
极客文库 » 三分钟学会门面模式!

Leave a Reply

欢迎加入「极客文库」,成为原创作者从这里开始!

立即加入 了解更多