设计模式のFacadePattern(外观模式)----结构模式

时间:2023-12-22 14:35:26

一、产生背景

外观模式(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. 如果增加新的子系统可能需要修改外观类或客户端的源代码,这样就违背了”开——闭原则“(不过这点也是不可避免)。