写点什么

FacadePattern- 门面模式

作者:梁歪歪 ♚
  • 2022 年 5 月 29 日
  • 本文字数:1430 字

    阅读完需:约 5 分钟

FacadePattern-门面模式

门面模式

门面模式(Facade Pattern):又被称之为外观模式。门面模式提供了一个统一的接口,这个接口可以用来访问相同子系统或者不同子系统中的一群接口。门面模式使得系统更加容易调用,属于结构型模式。


示例:我们通过多个系统之间的互相调用来举例说明...


  • 子系统 ASubSystemA.java


package cn.liangyy.facade;
/** * 子系统A */public class SubSystemA { public void doSomething(){ System.out.println("我是 A..."); }}
复制代码


  • 子系统 BSubSystemB.java


package cn.liangyy.facade;
/** * 子系统B */public class SubSystemB { public void doSomething(){ System.out.println("我是 B..."); }}
复制代码


假设以上子系统 A、B 的方法不想对所有人都开放,这时我们就需要一个门面类来集成两个子系统,统一并开放接口


  • 门面类SimpleFacade.java


package cn.liangyy.facade;
/** * 门面类 * 集成两个子系统,并对外开放统一接口 */public class SimpleFacade { private SubSystemA systemA = new SubSystemA(); private SubSystemB systemB = new SubSystemB();
public void doA(){ this.systemA.doSomething(); }
public void doB(){ this.systemB.doSomething(); }}
复制代码


  • 测试TestSimpleFacade.java


package cn.liangyy.facade;
/** * 门面模式-测试 */public class TestSimpleFacade { public static void main(String[] args) { SimpleFacade simpleFacade = new SimpleFacade(); simpleFacade.doA(); simpleFacade.doB(); }}
复制代码


通过上述例子,大家可能像我一样会有一种“这特么也是设计模式?”的感慨。其实设计模式并不是什么高深的知识,只是前人的一种经验总结而已,可以看到我们通过门面类以后,就不会直接调用子系统,而通过门面类来统一调用。这里门面类和子系统方法是一对一的关系,现在假如我们一个流程里面需要多个子系统的方法共同调用才可以,那么我们就可以稍微改造一下门面类...


  • 重新写一个门面类Facade.java


package cn.liangyy.facade;
/** * 门面类 * 集成两个子系统,并对外开放统一接口 */public class Facade { private SubSystemA systemA = new SubSystemA(); private SubSystemB systemB = new SubSystemB();
public void doA(){ this.systemA.doSomething(); }
public void doB(){ this.systemB.doSomething(); }
public void doAB(){ this.systemA.doSomething(); this.systemB.doSomething(); }}
复制代码


  • 测试TestFacade.java


package cn.liangyy.facade;
/** * 门面模式-测试 */public class TestFacade { public static void main(String[] args) { Facade facade = new Facade(); facade.doAB(); }}
复制代码


门面模式适用场景


  • 当各个子系统越来越复杂时,可以提供门面接口来统一调用。

  • 构建多层系统结构时,利用门面对象来作为每层的入口,这样可以简化分层间的接口调用。


门面模式优点


  • 简化了调用过程,调用者无需深入了解子系统,以防给子系统带来风险。

  • 减少了系统间的依赖,松散了耦合度。

  • 将系统划分了层次,提高了安全性。

  • 通过门面类隐藏了各个子系统,使得子系统只对门面类可知,所以遵循了迪米特法则。


门面模式缺点


  • 当增加子系统或者扩展子系统功能时,可能容易带来未知风险。

  • 当我们需要新增或者修改调用逻辑时,需要修改门面类,不符合开闭原则。

发布于: 刚刚阅读数: 3
用户头像

梁歪歪 ♚

关注

还未添加个人签名 2021.07.22 加入

还未添加个人简介

评论

发布
暂无评论
FacadePattern-门面模式_设计模式_梁歪歪 ♚_InfoQ写作社区