意图: 为了子系统中的一组接口提供一个一致的界面(访问方式),Facade模式定义了一个高层接口,这个接口使得这一子系统更加 容易使用.
场景: 我们(客户端)需要访问一个子系统,但是子系统中的功能很多,而我们只需要使用一部分功能,这时就可以使用Facade模式,创建一个或一组新的类(外观)提供需要的功能.
使用Facade前:
使用Facade后:
效果: 客户端直接和外观交互,降低了对子系统使用的复杂度, 降低了客户端与子系统间的耦合度,而且可以在外观中很容易监控对子系统的使用情况.但是,未被Facade中包含的子系统中的其他功能对于客户端是不可见的.
实现: 定义一个外观(一个或一组新的类)来提供所需要的接口,让外观使用子系统.
应用: 两元书店, 后台提供了许多功能包括入库,查询,更新,上下线等后台操作,而前台只需要一部分功能,而且对于WAP前端和WWW前端使用的功能不一致,这样就可以对WAP和WWW前端各自提供外观.
java与模式书中的例子:
医院有很多功能:
门诊,挂号,取药,划价,CT,验血
病人需要其中的几个功能,于是可以咨询Facade---- 接待员(当然,这是理想情况).