外观模式定义:隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
主要意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。
解决方案:客户端不与系统耦合,外观类与系统耦合。
主要应用:
1,设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。
2,开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。
3, 维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。
优点:
1、减少系统相互依赖。
2、提高灵活性。
3、提高了安全性。
缺点:
不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。
外观模式类图:
代码实现:
using System; namespace _03外观模式_示例代码 { class Program { static void Main(string[] args) { Facade facade = new Facade(); facade.MethodA(); facade.MethodB(); Console.Read(); } } /// <summary> /// 子系统一 /// </summary> class SubSystemOne { public void MethodOne() { Console.WriteLine(" 子系统方法一"); } } /// <summary> /// 子系统二 /// </summary> class SubSystemTwo { public void MethodTwo() { Console.WriteLine(" 子系统方法二"); } } /// <summary> /// 子系统三 /// </summary> class SubSystemThree { public void MethodThreee() { Console.WriteLine(" 子系统方法三"); } } /// <summary> /// 子系统四 /// </summary> class SubSystemFour { public void MethodFour() { Console.WriteLine(" 子系统方法四"); } } /// <summary> /// 外观类 /// </summary> 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.MethodThreee(); } } }
C#的定义,声明,创建变量的区别:https://zhidao.baidu.com/question/876882503033761852.html