InfoQ你应该了解的5种TypeScript设计模式( 五 )

box2.add( new Product("Samsung TV 20in", 300)) box2.add( new Product("Samsung TV 50in", 800)) box1.add(box2) console.log("Total price: ", box1.getPrice) 在上面的示例中 , 我们可以将 Product 放入 Box 中 , 也可以将 Box 放入其他 Box 中 。 这是组合的经典示例 , 因为你要达到的目的是获得要交付产品的完整价格 , 因此你要在大 Box 中添加每个元素的价格(包括每个较小 Box 的价格) 。 这样 , 通常称为“component”的元素是 Product 类 , 也称为树内的“leaf”元素 。 这是因为该实体没有子级 。 Box 类本身是组合类 , 具有子列表 , 所有子类都实现相同的接口 。 最后一部分代码是因为你希望能够遍历所有子项并执行相同的方法(请记住 , 这里的子项可以是另一个较小的组合) 。
该示例的输出应为:
Adding a Bubble gum to the box Adding a Samsung Note 20 to the box Adding a Samsung TV 20in to the box Adding a Samsung TV 50in to the box Adding a A box with 2 products to the box Total price: 2105.5因此 , 在处理遵循同一接口的多个对象时 , 请考虑使用这种模式 。 它将复杂性隐藏在单个实体(组合本身)中 , 你会发现它有助于简化与小组的互动 。
设计模式是用于解决问题的完美工具 , 但你必须先了解它们 , 并针对自身面对的场景做一些调整才能让它们起作用 , 或者修改你的业务逻辑以配合模式 。 无论是哪种方式 , 都是一项不错的投资 。
你最喜欢哪种模式呢?你会经常在项目中使用它们吗?在评论中分享自己的看法吧!
参考阅读:
InfoQ 读者交流群上线啦!各位小伙伴可以扫描下方二维码 , 添加 InfoQ 小助手 , 回复关键字“进群”申请入群 。 大家可以和 InfoQ 读者一起畅所欲言 , 和编辑们零距离接触 , 超值的技术礼包等你领取 , 还有超值活动等你参加 , 快来加入我们吧!
【InfoQ你应该了解的5种TypeScript设计模式】点个在看少个 bug ??