设计模式之门面模式(Facade Design Pattern)

门面模式作为结构型设计模式,旨在简化接口使用,隐藏内部复杂性。通过接口整合,将A、B、C三个接口合并为Facade接口X,降低调用成本。接口隔离则针对调用方只需部分接口的情况,提供定制化的门面接口,避免暴露多余方法。门面模式与适配器模式类似,但适用场景不同,前者由服务提供方使用,后者由调用方使用。
摘要由CSDN通过智能技术生成

门面模式也叫外观模式,是八种结构型模式之一。不管是门面或外观,意思都是提供想让外人看到的部分,隐藏不想被外人看到的部分。从代码角度理解,就是服务提供方通过门面模式来公开对外服务,隐藏内部服务实现的细节。

门面模式的实现可通过两种方法:接口整合和接口隔离。下面我们用伪代码来举例说明:

接口整合例子:

服务提供方有A、B、C三个接口,调用方实现某个功能需要依次调用ABC三个接口。这样的设计增加了调用方调用的成本和调用的复杂度。可以使用门面模式通过接口整合的方法,把ABC三个接口整合成一个门面接口X,调用方只需要调用X接口就可以了。

interface A {
  public void doa();
  public void executea();
}

interface B {
  public void dob();
  public void executeb();
}

interface C {
  public void doc();
}


//门面接口
interface Facade {
  public void dox();
  public void executex();
}

//门面类
class XFacade implements Facade{
  A a;
  B b;
  C c;

  XFacade(A a, B b, C c) {
    this.a = a; this.b = b; this.c = c;
  }

  //整合abc三个接口
  public void dox() {
    a.doa();
    b.dob();
    c.doc();
  }

  //整合ab两个接口
  public void executex() {
    a.executea();
    b.executeb();
  }
}

接口隔离例子:

服务方接口A有多个方法,但是调用方只需要其中一个方法。如果直接提供A,就违反了接口隔离原则。可以使用门面模式通过接口隔离的方法,只提供调用方需要的方法。

interface A {

  //action是调用方法要调用方法
  public void action();
  public void execute();
  ...其他方法

}

//门面接口
interface Facade {

  public void action();

}

//门面类
class XFacade implements Facade{
  A a;

  XFacade(A a) {
    this.a = a; 
  }

  //开放action方法,隔离其他方法
  public void action() {
    a.action();
  }
}

门面模式跟适配器模式很像,区别之一适配器模式是调用方才会运用的模式,门面模式是被调用方才会运用的模式。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值