15 Facade模式——简单窗口

15.1 Facade模式

程序这东西总是会越来越大,随着时间的推移,程序中的类会越来越多,而且他们之间相互关联,这会导致程序结构也变得越来越复杂。我们在使用这些类之前,必须先弄清楚它们之间的关系,注意正确的调用顺序。
特别是在调用大兴程序进行处理是,我们需要格外注意那些数量庞大的类之间错综复杂的关系。不过语气这么做,不如为这个大型程序准备一个“窗口”。这样,就不必单独地关心每个类了,只需简单地对“窗口”提出请求即可。
这个窗口就是Facade模式。
使用Facade模式可以为相互关联一起的错综复杂的类整理出高层接口。其中的Facade角色可以让系统对外只有一个简单的接口。而且,Facade角色还会考虑到系统内部个各类之间的责任关系和依赖,按照正确的顺序调用各个类。

15.2 示例程序

从一个邮件地址中获取用户名字的数据库类,一个用于编写HTML文件的类,以及一个扮演Facade角色并提供高层接口的类。

名字 说明
pagemaker Database 从邮件地址中获取用户名的类
pagemaker HtmlWriter 编写HTML文件的类
pagemaker PageMaker 根据邮件地址编写用户的web页面
Main 测试程序的类

image.png

15.3 Facade模式中的角色

在窗口模式中有以下几种角色

  • Facade(窗口):Facade角色代表构成系统的许多其他角色的“简单窗口”。Facade角色向外部提供高层接口。
  • 构成系统的许多其他角色:这些角色各自完成自己的工作,它们并不知道Facade角色。Facade角色调用其他角色进行工作,到那时其他角色不会调用Facade角色。
  • Client(请求者):Client角色负责调用Facade角色。

image.png

15.4 扩展思路的要点

Facade角色到底做什么工作

Facade模式可以让复杂的东西看起来简单。这里提到的“复杂的东西”,其实就是后台工作的这些类之间的关系和他们的使用方法,使用Facade模式可以让我们不必在意这些复杂的东西。
这里的重点是接口变少了。程序中如果有很多类和方法,我们在决定到底应该使用哪个类或是方法时容易迷茫。有时,类和方法的调用顺序也很容易弄错,必须格外注意价格,因此如果有一个能够使接口变少的Facade角色也是美好的事情。

16 Mediator模式——只有一个仲裁者