陈巧倩

设计模式-外观模式

· 149 words · 1 minutes to read
Categories: CSharp
Tags: Design Pattern

Facade外观模式属于结构型设计模式,为子系统中的一组接口提供统一的接口Facade设计模式定义了一个更高级的接口,使子系统更易于使用。

Design Pattern:Facade 🔗

基本介绍 🔗

构成 🔗

  • Facade:外观类,外观类中关联(一个或多个)子系统的功能和责任,将客户请求委托给适当的子系统对象。
  • Subsystem classes:子系统类,处理Facade对象分配的工作,子系统不知道Facade的存在。

优点 🔗

  • 客户屏蔽了子系统组件,从而简化了接口,减少了客户处理的对象数目并使子系统的使用更加简单。
  • 子系统和客户耦合较低,子系统的组件变化不会影响到它的客户。

缺点 🔗

  • 新增的子系统可能需要修改Facade类或客户端的源代码。

实例 🔗

C#中外观模式的实例,我们从电子城出来后,准备去吃饭,然后到了一家饭馆,开始下单。

/// <summary>
/// 菜品系统
/// </summary>
public class ProductSystem
{
    /// <summary>
    /// 获取菜品详情
    /// </summary>
    public void GetProductDetails()
    {
		Console.WriteLine("获取菜品");
    }
}
/// <summary>
/// 支付系统
/// </summary>
public class PaymentSystem
{
    /// <summary>
    /// 支付
    /// </summary>
    public void MakePayment()
    {
		Console.WriteLine("付款");
    }
}
/// <summary>
/// 发票系统
/// </summary>
public class InvoiceSystem
{
    /// <summary>
    /// 开发票
    /// </summary>
    public void SendInvoice()
    {
		Console.WriteLine("开具发票");
    }
}
/// <summary>
/// 餐馆
/// </summary>
public class RestaurantFacade
{
    private ProductSystem _productSystem;
    private PaymentSystem _paymentSystem;
    private InvoiceSystem _invoiceSystem;

    public RestaurantFacade()
    {
        _productSystem = new ProductSystem();
        _paymentSystem = new PaymentSystem();
        _invoiceSystem = new InvoiceSystem();
    }

    /// <summary>
    /// 点菜指令
    /// </summary>
    public void DishOrder()
    {
        //获取菜品
        _productSystem.GetProductDetails();
        //支付系统
        _paymentSystem.MakePayment();
        //开具发票
        _invoiceSystem.SendInvoice();
    }
}

实际运行:

RestaurantFacade facade = new RestaurantFacade();
facade.DishOrder();

结论 🔗

搬砖愉快!