外观模式
一、定义
为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观模式跟代理模式类似,也更偏向于架构模式,常见于企业应用集成中,企业应用集成包括界面集成,业务流程集成(过程集成),控制集成(应用集成,API集成),数据集成四个层面,都与外观模式有密切关系。
二、UML类图
三、目的
- 为一个复杂的模块或子系统提供一个一致的外界访问接口,降低客户端访问子系统的复杂度。
- 使客户端与子系统之间解耦,让子系统内部模块更易维护和扩展。
- 进行访问控制,提高系统安全性。
- 维护大型遗留系统。
四、和代理模式之间的异同
相同点
- 都可以在不改变子系统代码的基础上,对子系统加以控制;
- 原有系统之间都是可以直接访问的,两个模式都是为了让子系统更加容易使用;
- 都不应该在其中添加子系统没有的功能。
不同点
- 外观模式面向的是多个不同的子系统,而代理模式通常面向的是一个(或者多个相同的)子系统。
- 外观模式更多强调是对多个子系统的整合,而代理模式更多强调的是对某个子系统的代理。
极端情况下,假如外观模式中的子系统只有一个,就跟代理模式差不多了,这有点像抽象工厂模式和工厂方法模式之间的关系。
五、示例
public class TestService : ITestService { private readonly ITest1Repository _test1Repository; private readonly ITest2Repository _test2Repository; public TestService(ITest1Repository test1Repository, ITest2Repository test2Repository) { this._test1Repository = test1Repository; this._test2Repository = test2Repository; } public void Test() { this._test1Repository.Method1();
this._test2Repository.Method2(); } }