paint-brush
什么是外观设计模式?经过@ssukhpinder
599 讀數
599 讀數

什么是外观设计模式?

经过 Sukhpinder Singh4m2023/02/28
Read on Terminal Reader

太長; 讀書

外观设计模式为子系统提供单一入口点,向客户隐藏其复杂性。在我们的示例中,我们可以创建一个外观,为库存、支付和运输子系统提供统一的接口。本文使用 C# 编程语言演示了 Facade 设计模式。
featured image - 什么是外观设计模式?
Sukhpinder Singh HackerNoon profile picture
0-item

随着应用程序的规模和复杂性的增加,管理子系统之间的相互依赖性变得具有挑战性。外观设计模式简化了这种交互,并为子系统中的一组接口提供了一个统一的接口。

用例

考虑一个在线购物应用程序,它允许客户浏览产品、将它们添加到购物车并结帐。该应用程序有不同的子系统负责管理其他部分,例如库存、支付和运输系统。这些子系统具有不同的接口,需要相互通信才能完成购买。


问题在于,随着应用程序的增长,管理子系统之间的这种通信可能会很困难。一个子系统中的更改会对其他子系统产生级联效应,从而导致代码库混乱且难以维护。


我们可以使用外观设计模式来简化子系统之间的交互。外观模式为子系统提供单一入口点,向客户端隐藏其复杂性。在我们的示例中,我们可以创建一个外观,为库存、支付和运输子系统提供统一的接口。

先决条件

  • OOPS 概念的基本知识。
  • 任何编程语言知识。

本文使用 C# 编程语言演示了 Facade 设计模式。

学习目标

  • 如何使用 Facade 设计模式进行编码

入门

让我们从为我们的子系统定义接口开始

public interface IInventorySystem { void Update(int productId, int quantity); bool IsAvailable(int productId, int quantity); } public interface IPaymentSystem { bool Charge(double amount); } public interface IShippingSystem { bool Ship(string address); }


接下来,我们可以实现子系统:

 public class InventorySystem : IInventorySystem { public void Update(int productId, int quantity) { // update inventory } public bool IsAvailable(int productId, int quantity) { // check if inventory is available return true; } } public class PaymentSystem : IPaymentSystem { public bool Charge(double amount) { // charge the customer return true; } } public class ShippingSystem : IShippingSystem { public bool Ship(string address) { // ship the product return true; } }


最后,我们可以创建一个外观,为这些子系统提供一个简单的接口:

 public class OrderFacade { private IInventorySystem _inventorySystem; private IPaymentSystem _paymentSystem; private IShippingSystem _shippingSystem; public OrderFacade() { _inventorySystem = new InventorySystem(); _paymentSystem = new PaymentSystem(); _shippingSystem = new ShippingSystem(); } public bool PlaceOrder(int productId, int quantity, double amount, string address) { bool success = true; if (_inventorySystem.IsAvailable(productId, quantity)) { _inventorySystem.Update(productId, -quantity); success = success && _paymentSystem.Charge(amount); success = success && _shippingSystem.Ship(address); } else { success = false; } return success; } }


OrderFacade类中,我们创建了子系统的实例并提供了一个简单的方法PlaceOrder ,它接受产品 ID、数量、金额和送货地址。 PlaceOrder技术使用子系统来检查库存、向客户收费以及运送产品。

使用外观模式,客户端代码可以创建OrderFacade类的实例并调用PlaceOrder方法,而无需担心子系统的细节。


 var order = new OrderFacade(); bool success; // place an order success = order.PlaceOrder(productId: 123, quantity: 1, amount: 99.99, address: "123 Main St"); if (success) { Console.WriteLine("Order placed successfully"); } else { Console.WriteLine("Unable to place order"); }


在此示例中,我们使用外观模式来简化在线购物应用程序中子系统之间的交互。客户端代码只需要与 OrderFacade 类交互,不需要了解库存、支付和发货子系统。

结论

外观设计模式简化了子系统之间的交互,为子系统中的一组接口提供统一的接口。它可以帮助减少耦合并提高大型复杂应用程序的可维护性。本文通过用例和代码示例探讨了 C# 中的外观设计模式。使用外观模式,我们可以简化代码库,使其更易于维护和扩展。


感谢您阅读,希望您喜欢这篇文章。请在评论部分提供您的反馈。

跟着我

C# 出版物开发者。 to , Pinterest , Substack , Hashnode , Write.as

更多设计模式—— 参考领英学习


也发布在这里。