外观模式(Facade)

1.    定义

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

2.      UML 类图

 

3.      结构代码

// Facade pattern -- Structural example

using System;

 

namespace DoFactory.GangOfFour.Facade.Structural

{

  /// <summary>

  /// MainApp startup class for Structural

  /// Facade Design Pattern.

  /// </summary>

  class MainApp

  {

    /// <summary>

    /// Entry point into console application.

    /// </summary>

    public static void Main()

    {

      Facade facade = new Facade();

 

      facade.MethodA();

      facade.MethodB();

 

      // Wait for user

      Console.ReadKey();

    }

  }

 

  /// <summary>

  /// The 'Subsystem ClassA' class

  /// </summary>

  class SubSystemOne

  {

    public void MethodOne()

    {

      Console.WriteLine(" SubSystemOne Method");

    }

  }

 

  /// <summary>

  /// The 'Subsystem ClassB' class

  /// </summary>

  class SubSystemTwo

  {

    public void MethodTwo()

    {

      Console.WriteLine(" SubSystemTwo Method");

    }

  }

 

  /// <summary>

  /// The 'Subsystem ClassC' class

  /// </summary>

  class SubSystemThree

  {

    public void MethodThree()

    {

      Console.WriteLine(" SubSystemThree Method");

    }

  }

 

  /// <summary>

  /// The 'Subsystem ClassD' class

  /// </summary>

  class SubSystemFour

  {

    public void MethodFour()

    {

      Console.WriteLine(" SubSystemFour Method");

    }

  }

 

  /// <summary>

  /// The 'Facade' class

  /// </summary>

  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("\nMethodA() ---- ");

      _one.MethodOne();

      _two.MethodTwo();

      _four.MethodFour();

    }

 

    public void MethodB()

    {

      Console.WriteLine("\nMethodB() ---- ");

      _two.MethodTwo();

      _three.MethodThree();

    }

  }

}


Output
MethodA() ----
SubSystemOne Method
SubSystemTwo Method
SubSystemFour Method

MethodB() ----
SubSystemTwo Method
SubSystemThree Method

4.      实例代码

// Facade pattern -- Real World example

using System;

 

namespace DoFactory.GangOfFour.Facade.RealWorld

{

  /// <summary>

  /// MainApp startup class for Real-World

  /// Facade Design Pattern.

  /// </summary>

  class MainApp

  {

    /// <summary>

    /// Entry point into console application.

    /// </summary>

    static void Main()

    {

      // Facade

      Mortgage mortgage = new Mortgage();

 

      // Evaluate mortgage eligibility for customer

      Customer customer = new Customer("Ann McKinsey");

      bool eligible = mortgage.IsEligible(customer, 125000);

 

      Console.WriteLine("\n" + customer.Name +

          " has been " + (eligible ? "Approved" : "Rejected"));

 

      // Wait for user

      Console.ReadKey();

    }

  }

 

  /// <summary>

  /// The 'Subsystem ClassA' class

  /// </summary>

  class Bank

  {

    public bool HasSufficientSavings(Customer c, int amount)

    {

      Console.WriteLine("Check bank for " + c.Name);

      return true;

    }

  }

 

  /// <summary>

  /// The 'Subsystem ClassB' class

  /// </summary>

  class Credit

  {

    public bool HasGoodCredit(Customer c)

    {

      Console.WriteLine("Check credit for " + c.Name);

      return true;

    }

  }

 

  /// <summary>

  /// The 'Subsystem ClassC' class

  /// </summary>

  class Loan

  {

    public bool HasNoBadLoans(Customer c)

    {

      Console.WriteLine("Check loans for " + c.Name);

      return true;

    }

  }

 

  /// <summary>

  /// Customer class

  /// </summary>

  class Customer

  {

    private string _name;

 

    // Constructor

    public Customer(string name)

    {

      this._name = name;

    }

 

    // Gets the name

    public string Name

    {

      get { return _name; }

    }

  }

 

  /// <summary>

  /// The 'Facade' class

  /// </summary>

  class Mortgage

  {

    private Bank _bank = new Bank();

    private Loan _loan = new Loan();

    private Credit _credit = new Credit();

 

    public bool IsEligible(Customer cust, int amount)

    {

      Console.WriteLine("{0} applies for {1:C} loan\n",

        cust.Name, amount);

 

      bool eligible = true;

 

      // Check creditworthyness of applicant

      if (!_bank.HasSufficientSavings(cust, amount))

      {

        eligible = false;

      }

      else if (!_loan.HasNoBadLoans(cust))

      {

        eligible = false;

      }

      else if (!_credit.HasGoodCredit(cust))

      {

        eligible = false;

      }

 

      return eligible;

    }

  }

}


Output
Ann McKinsey applies for $125,000.00 loan

Check bank for Ann McKinsey
Check loans for Ann McKinsey
Check credit for Ann McKinsey

Ann McKinsey has been Approved

该文章来自:http://www.dofactory.com/Patterns/PatternFacade.aspx


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值