介绍
《设计模式》一书中对Facade模式是这样描述的:
为子系统中的一组接口提供一个统一接口。Facade模式定义了一个更高层次的接口,使子系统更加容易使用。
通过Facade模式,我们可以更简单的去使用一个复杂的系统。我们可以封装出更简单、更容易使用、更符合我们需求的系统。
实践
假如有一个Client对象必须处理Database、Model、Element对象。Client必须首先通过Database对象打开数据库,获取Model对象,然后再查询Model对象,获取Element对象,最后请求Element对象的信息。
这时候我们可以创建一个Facade来简化这个过程,具体如下图所示:
使用Facade之前
使用Facade之后
Facade还可以用来隐藏或者封装系统,以下两种情况适合使用Facade进行封装:
- 跟踪系统的使用情况:强制所有对系统的访问都必须经过Facade,这样就可以很容易的监视系统的使用情况。
- 更换系统:将原系统作为Facade类的一个私有成员,这样新系统只需要符合Facade的接口就可以很容易的进行系统的更换。
代码实例
//TODO
小结
Facade模式适用于以下情况:
- 不需要使用一个复杂系统的所有功能,而且可以创建一个新的类,包含访问系统的所有规则。
- 希望封装或者隐藏原系统。
- 希望使用原系统的功能,而且还希望增加一些新功能。
- 编写新类的成本小于所有人学会使用或者未来维护原系统上所需的成本。