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();
结论 🔗
搬砖愉快!