一,什么是外观模式?
外观模式:为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。
二,我们看看代码的实现
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _10.外观模式 { class Program { static void Main(string[] args) { //不存在外观类是我们的调用方法是这样的,如下代码; //People p = new People("中国人"); //Event e = new Event(); //Console.Write(p.people); //e.Say(); //外观系统,跟以上代码比较,我们可以知道:外观模式提供了一个统一的接口,用来访问子系统中的一群接口。而不用实例过多,同时也降低了客户端和子系统之间的紧耦合,如People和Event的实例都不在Program中了 Facade fa = new Facade("中国人"); fa.WhoEvent(); Facade fa1 = new Facade("美国人"); fa1.WhoEvent(); Console.Read(); } } /// <summary> /// 外观类 /// </summary> public class Facade { private Event ev { get; set; } private People pe { get; set; } public Facade(string people) { ev = new Event(); pe = new People(people); } public void WhoEvent() { Console.Write(pe.people); ev.Say(); ev.Eat(); } } /// <summary> /// 相当于行为子系统 /// </summary> public class Event { public void Say() { Console.Write("说话和"); } public void Eat() { Console.WriteLine("吃饭"); } } /// <summary> /// 相当于人子系统 /// </summary> public class People { public string people { get; set; } public People(string p) { this.people = p; } } }
三,在上面代码中,我们的代码结构是:客户端--》Facade--》n个子系统(People和Event等)
1》在外观模式中我们,完全将子系统的实例放到外观里面,这里我们可以将提供了一个一直的界面,客户端可以直接通过外观类来调用内部子系统中方法,而避免了耦合
四,那外观模式和适配器模式有什么区别呢?
适配器:Adapter适配器模式是将两个不兼容的类组合在一起使用
外观模式:为子系统中的一组接口提供一个一致的界面
根据以上两个解释我们可以知道:
1》适配器是针对单个对象,而外观模式是针对多个对象(子系统)的
2》适配器是对单个对象的接口适配,从而实现现有了类可以适配当前系统的结果
3》而外观模式则是将多个子系统的接口包装起来,实现降低耦合和共同调用,和适配器模式的意图是不一样的