1.定义
Facade模式名为外观模式,是一种结构型模式,外观模式是一种非常简单的设计模式。当系统过于复杂时,如果需要调用多个子系统来完成业务,此时会变的非常的复杂,而外观模式则是开一个窗口,相当于一个中介来帮你整合你要调用的子系统,而调用者只需要关心这个窗口就行了。
例如现在我需要开一家公司,开公司需要工商注册、银行开户、纳税登记而我作为一个开公司的人(不差钱),此时我觉得太麻烦了还有这么多流程,此时我就找了一个叫外观模式的人帮我办理。而我只需要关注这个外观模式的人就行了。
2.外观模式结构图
Facade就是一个窗口,注册公司的流程都由他来处理,而AdminOfIndustry、Bank、Taxation分别表示工商注册、银行开户和纳税登记。
3.外观模式实现
Company就是公司的实体,包含了公司名字,公司法人等字段。还对外提供了构造方法,这是方便于注册公司的时候进行调用,而注册公司则是通过AdminOfIndustry来实现的。
AdminOfIndustry代表的是工商注册,也就是工商局,直接调用Company来生成公司的实例。
Bank代表的银行开户,通过openAccount方法,来根据公司名字注册一个银行卡,其中包括了银行卡属于的公司以及卡号。
Taxation代表的纳税登记,其中applyTaxCode则是通过公司名字进行一个纳税登记,所以Taxation中存放了公司名称。
Facade是帮我们去注册公司的人,名字就叫外观吧,我们只需要给他提供自己要注册的公司名字以及法人,而至于跑工商局,跑银行以及去税务局都是这个人来。所以在Test中我们只是给了要注册的名字以及法人,这样公司就已经注册完成了。通过打印可以看到公司名字以及法人信息。
外观模式中登场的角色
Facade(窗口)角色,用于将复杂的系统进行整合然后暴露出一个窗口提供给调用者,文中由Facade类进行扮演。
构成系统的许多其他角色,这些角色各自完成各自的工作,他们并不知道Facade觉得,而Facade则是对他们的一个整合,文中由AdminOfIndustry、Bank、Taxation进行扮演此角色。
Client(请求者),用于发起调用,也就是注册公司的发起者,文中由Test类扮演此角色。
参考文献《图解设计模式》、廖雪峰的官网。
代码获取地址:https://gitee.com/bughong/design-pattern