设计模式の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();
        }
    }
}

四、设计模式分析

优点:

  1. 外观模式对客户屏蔽了子系统组件,从而简化了接口,减少了客户处理的对象数目并使子系统的使用更加简单。
  2. 外观模式实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件是紧耦合的。松耦合使得子系统的组件变化不会影响到它的客户。

缺点:

  1. 如果增加新的子系统可能需要修改外观类或客户端的源代码,这样就违背了”开——闭原则“(不过这点也是不可避免)。
原文地址:https://www.cnblogs.com/xietianjiao/p/8510233.html