设计模式のFacadePattern(外观模式)----结构模式
一、产生背景
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。
二、一般做法
Facade:负责子系统的的封装调用
Subsystem Classes:具体的子系统,实现由外观模式Facade对象来调用的具体任务
三、实例
1、子系统一
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FacadePattern { /// <summary> /// 子系统1 /// </summary> public class SubSystem1 { public void Print1() { Console.WriteLine("SubSystem1"); } } }
2、子系统二
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FacadePattern { /// <summary> /// 子系统1 /// </summary> public class SubSystem2 { public void Print2() { Console.WriteLine("SubSystem2"); } } }
3、外观
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FacadePattern { /// <summary> /// 外观模式对外接口类 /// </summary> public class Facade { private SubSystem1 _subSystem1; private SubSystem2 _subSystem2; public Facade() { _subSystem1 = new SubSystem1(); _subSystem2 = new SubSystem2(); } public void Print() { _subSystem1.Print1(); _subSystem2.Print2(); } } }
4、客户端
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FacadePattern { //外观模式 class Program { static void Main(string[] args) { Facade facade = new Facade(); facade.Print(); Console.ReadLine(); } } }
四、设计模式分析
优点:
- 外观模式对客户屏蔽了子系统组件,从而简化了接口,减少了客户处理的对象数目并使子系统的使用更加简单。
- 外观模式实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件是紧耦合的。松耦合使得子系统的组件变化不会影响到它的客户。
缺点:
- 如果增加新的子系统可能需要修改外观类或客户端的源代码,这样就违背了”开——闭原则“(不过这点也是不可避免)。