C# 设计模式系列教程-外观模式

2019-12-30 12:36:46于丽
外观模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。  

1. 概述

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

2. 模式中的角色

  2.1 外观类(Facade):外观类知道哪些子系统类负责处理请求,将客户的请求代理给恰当的子系统对象。

  2.2 子系统类集合(SubSystem Classes):子系统类集合实现了子系统的功能,处理外观类对象指派的任务。

3. 模式解读

  3.1 外观模式的类图

C#,设计模式,外观模式

  3.2 外观模式的代码实现


 /// <summary>
 /// 子系统中的一个类
 /// </summary>
 public class SubSystemOne
 {
  public void MethodeOne()
  {
   Console.WriteLine("Sub System first method.");
  }
 }

 /// <summary>
 /// 子系统中一个类
 /// </summary>
 public class SubSystemTwo
 {
  public void MethodTwo()
  {
   Console.WriteLine("Sub System second method.");
  }
 }

 /// <summary>
 /// 子系统中一个类
 /// </summary>
 public class SubSystemThree
 {
  public void MethodThree()
  {
   Console.WriteLine("Sub System third method.");
  }
 }

 /// <summary>
 /// 子系统中一个类
 /// </summary>
 public class SubSystemFour
 {
  public void MethodFour()
  {
   Console.WriteLine("Sub System fourth method.");
  }
 }

 /// <summary>
 /// 外观类
 /// </summary>
 public class Facade
 {
  private SubSystemOne one;
  private SubSystemTwo two;
  private SubSystemThree three;
  private SubSystemFour four;

  public Facade()
  {
   one = new SubSystemOne();
   two = new SubSystemTwo();
   three = new SubSystemThree();
   four = new SubSystemFour();
  }

  public void MethodA()
  {
   Console.WriteLine("nMethod group A----");
   one.MethodeOne();
   two.MethodTwo();
   four.MethodFour();
  }

  public void MethodB()
  {
   Console.WriteLine("nMethod group B----");
   two.MethodTwo();
   three.MethodThree();
  }
 }

    3.3 客户端代码


 class Program
 {
  static void Main(string[] args)
  {
   // 由于Facade的作用,客户端可以根本不知道子系统类的存在
   Facade facade = new Facade();
   facade.MethodA();
   facade.MethodB();

   Console.Read();
  }
 }