C#设计模式:外观模式(Facade Pattern)

一,什么是外观模式?

外观模式:为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。

二,我们看看代码的实现

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》而外观模式则是将多个子系统的接口包装起来,实现降低耦合和共同调用,和适配器模式的意图是不一样的

原文地址:https://www.cnblogs.com/May-day/p/8670360.html