阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

外观

64次阅读
没有评论

共计 1144 个字符,预计需要花费 3 分钟才能阅读完成。

为子系统中的一组接口提供一个一致的界面。Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

外观模式,即 Facade,是一个比较简单的模式。它的基本思想如下:

如果客户端要跟许多子系统打交道,那么客户端需要了解各个子系统的接口,比较麻烦。如果有一个统一的“中介”,让客户端只跟中介打交道,中介再去跟各个子系统打交道,对客户端来说就比较简单。所以 Facade 就相当于搞了一个中介。

我们以注册公司为例,假设注册公司需要三步:

  1. 向工商局申请公司营业执照;
  2. 在银行开设账户;
  3. 在税务局开设纳税号。

以下是三个系统的接口:

// 工商注册:
public class AdminOfIndustry {public Company register(String name) {...}
}

// 银行开户:
public class Bank {public String openAccount(String companyId) {...}
}

// 纳税登记:
public class Taxation {public String applyTaxCode(String companyId) {...}
}

如果子系统比较复杂,并且客户对流程也不熟悉,那就把这些流程全部委托给中介:

public class Facade {public Company openCompany(String name) {Company c = this.admin.register(name);
        String bankAccount = this.bank.openAccount(c.getId());
        c.setBankAccount(bankAccount);
        String taxCode = this.taxation.applyTaxCode(c.getId());
        c.setTaxCode(taxCode);
        return c;
    }
}

这样,客户端只跟 Facade 打交道,一次完成公司注册的所有繁琐流程:

Company c = facade.openCompany("Facade Software Ltd.");

很多 Web 程序,内部有多个子系统提供服务,经常使用一个统一的 Facade 入口,例如一个 RestApiController,使得外部用户调用的时候,只关心 Facade 提供的接口,不用管内部到底是哪个子系统处理的。

更复杂的 Web 程序,会有多个 Web 服务,这个时候,经常会使用一个统一的网关入口来自动转发到不同的 Web 服务,这种提供统一入口的网关就是 Gateway,它本质上也是一个 Facade,但可以附加一些用户认证、限流限速的额外服务。

练习

使用 Facade 模式实现一个注册公司的“中介”服务。

下载练习

小结

Facade 模式是为了给客户端提供一个统一入口,并对外屏蔽内部子系统的调用细节。

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-08-05发表,共计1144字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中