TypeScript 设计模式之【外观模式】

在这里插入图片描述

外观模式:简化复杂系统的购物平台

你有没有遇到过这样的情况,你有一个复杂的系统,里面有很多子系统和组件,每次使用它们都需要写很多代码,感觉非常繁琐。这时候,你可能会希望有一个简单的接口,能够帮你隐藏这些复杂性,让你更轻松地使用系统。

例如你在网上购物,你可以通过一个简单的购物平台,来浏览、选择和购买商品,而不需要了解每个商家的具体操作流程。外观模式就像是这个购物平台,能够帮你简化购物过程,让你更轻松地完成购物!

外观模式的秘密

外观模式就像是给你的系统加上了一层"购物平台",它提供了一个简单的接口,来隐藏系统的复杂性。通过这个接口,你可以更轻松地使用系统,而不需要了解系统的内部细节。

外观模式有什么利与害?

外观模式优点是可以简化复杂系统的使用,让你更轻松地使用系统,它遵循单一职责原则和开闭原则,对扩展开放,对修改关闭。缺点是过度使用,可能会导致外观类变得臃肿,难以维护。

如何使用外观模式来简化你的系统

外观涉及角色

  • 外观(ShoppingFacade):提供一个简单的购物平台接口,来隐藏各个商家的复杂操作流程

  • 子系统(MerchantA,MerchantB):各个商家和他们的具体操作流程

外观步骤

  1. 创建一个购物平台类,提供一个简单的购物接口

  2. 在购物平台类中,调用各个商家的功能

  3. 使用购物平台类,来简化购物过程

选择合适的购物平台类,你就能轻松地简化复杂的购物过程,让它变得更加易用和灵活!

代码实现案例

// 子系统A - 商家A
class MerchantA {
  browseProducts(): void {
    console.log("浏览商家A的商品");
  }

  selectProduct(): void {
    console.log("选择商家A的商品");
  }

  purchaseProduct(): void {
    console.log("购买商家A的商品");
  }
}

// 子系统B - 商家B
class MerchantB {
  browseProducts(): void {
    console.log("浏览商家B的商品");
  }

  selectProduct(): void {
    console.log("选择商家B的商品");
  }

  purchaseProduct(): void {
    console.log("购买商家B的商品");
  }
}

// 外观类 - 购物平台
class ShoppingFacade {
  private merchantA: MerchantA;
  private merchantB: MerchantB;

  constructor() {
    this.merchantA = new MerchantA();
    this.merchantB = new MerchantB();
  }

  browseAllProducts(): void {
    console.log("通过购物平台浏览所有商品");
    this.merchantA.browseProducts();
    this.merchantB.browseProducts();
  }

  selectAllProducts(): void {
    console.log("通过购物平台选择所有商品");
    this.merchantA.selectProduct();
    this.merchantB.selectProduct();
  }

  purchaseAllProducts(): void {
    console.log("通过购物平台购买所有商品");
    this.merchantA.purchaseProduct();
    this.merchantB.purchaseProduct();
  }
}

// 使用外观类
const shoppingFacade = new ShoppingFacade();
shoppingFacade.browseAllProducts(); // 输出: 通过购物平台浏览所有商品, 浏览商家A的商品, 浏览商家B的商品
shoppingFacade.selectAllProducts(); // 输出: 通过购物平台选择所有商品, 选择商家A的商品, 选择商家B的商品
shoppingFacade.purchaseAllProducts(); // 输出: 通过购物平台购买所有商品, 购买商家A的商品, 购买商家B的商品

在这里插入图片描述

外观模式的主要优点

  1. 简化复杂系统:通过提供一个简单的接口,隐藏系统的复杂性
  2. 遵循单一职责原则:外观类只负责简化系统的使用,不涉及系统的内部逻辑
  3. 遵循开闭原则:可以在不修改现有代码的情况下,扩展系统的功能
  4. 提高代码的可读性和可维护性:通过外观类,简化了系统的使用,提高了代码的可读性和可维护性

外观模式的主要缺点

  1. 会导致外观类变得臃肿:如果外观类包含了太多的功能,可能会变得难以维护
  2. 会掩盖系统的真实复杂性:外观类隐藏了系统的内部细节,可能会导致开发者对系统的真实复杂性缺乏了解

外观模式的适用场景

  1. 需要简化复杂系统的使用:通过提供一个简单的接口,隐藏系统的复杂性
  2. 希望提高代码的可读性和可维护性:通过外观类,简化了系统的使用,提高了代码的可读性和可维护性
  3. 系统中有多个子系统和组件:通过外观类,统一管理这些子系统和组件

总结

外观模式是一种结构型设计模式,它通过提供一个简单的接口,来隐藏系统的复杂性。外观模式在不修改现有系统的情况下,简化了系统的使用,提高了代码的可读性和可维护性。合理使用外观模式,可以让你的代码更加简洁,更易于维护和扩展。

喜欢的话就点个赞 ❤️,关注一下吧,有问题也欢迎讨论指教。感谢大家!!!

下期预告:TypeScript 设计模式之【享元模式】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bobostudio1995

感谢您的一杯咖啡,是我前进的动

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值