外观模式
概述
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,为这个接口使用
外观模式也可以叫为门面模式,应用场景也比较明确,主要在接口设计方面使用
结构图
代码实现
子系统
/// <summary> /// 子系统一 /// </summary> public class SubSystemOne { public void MethodOne() { Console.WriteLine(" 子系统方法一"); } }
/// <summary> /// 子系统二 /// </summary> public class SubSystemTwo { public void MethodTwo() { Console.WriteLine(" 子系统方法二"); } }
/// <summary> /// 子系统三 /// </summary> class SubSystemThree { public void MethodThree() { Console.WriteLine(" 子系统方法三"); } }
/// <summary> /// 子系统四 /// </summary> public class SubSystemFour { public void MethodFour() { Console.WriteLine(" 子系统方法四"); } }
外观类
/// <summary> /// 外观类 /// </summary> public class Facade { SubSystemOne one; SubSystemTwo two; SubSystemThree three; SubSystemFour four; public Facade() { one = new SubSystemOne(); two = new SubSystemTwo(); three = new SubSystemThree(); four = new SubSystemFour(); } public void MethodA() { Console.WriteLine("\n方法组A() ---- "); one.MethodOne(); two.MethodTwo(); four.MethodFour(); } public void MethodB() { Console.WriteLine("\n方法组B() ---- "); two.MethodTwo(); three.MethodThree(); } }
客户端
class Program { static void Main(string[] args) { Facade facade = new Facade(); facade.MethodA(); facade.MethodB(); Console.Read(); } }
运行结果
优势
符合迪米特法则(最少知识原则)
隐藏系统的复杂性,提供精简的访问方法,让高层模块可以更加容易地间接调用这些子系统的功能。
减少系统相互依赖
提高灵活性
提高了安全性
降低了大型软件系统中的编译依赖性,简化了系统在不同平台之间的移植过程
使用场景
阶段各种第三方SDK、开源类库的使用
为复杂的模块或子系统提供外界访问的模块。
子系统相对独立。
预防低水平人员带来的风险。
解决易用性问题
通过将多个接口调用替换为一个门面接口调用,减少网络通信成本,提高 客户端的响应速度
解决分布式事务问题。让两个不同的接口达到事务执行要引入很多机制非常复杂,要是再用一个接口包裹这来两个接口来做处理就会比较简单
缺陷
不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。