gpt4 book ai didi

java - 装饰模式问题

转载 作者:行者123 更新时间:2023-11-29 09:59:54 27 4
gpt4 key购买 nike

最近我阅读了有关装饰器设计模式的内容,但我留下了一些无法在网上找到的悬而未决的问题。我不打算展示代码,因为我不想让这个问题比实际情况更复杂。我简单举个例子:

地铁商店:

组件 --> SubSandwich

混凝土组件 --> 15cmSub, 30cmSub

装饰器 --> 配料

ConcreteDecorator --> 白奶酪、黄奶酪、果酱、鸡肉。

这正是 Subway 商店的运作方式。选择您的核心三明治大小,然后添加您喜欢的所有配料。但我还有一些疑问:

  1. 如果成分组合无效怎么办?例如,赛百味政策规定同一潜艇中不能有两种奶酪。现在假设浇头有 10000 种可能的组合,只有一种是无效的。这是否完全打破了装饰者模式?

  2. 如果两种成分相互依赖怎么办。例如,如果您订购生菜,那么您需要一些其他种类的蔬菜来制作“有效”子。

  3. 什么时候使用装饰器模式而不是使用 ArrayList of Ingredient 的 SubSandwich 类更好?我知道这里的成分不会添加行为,这使得 Subway 示例不准确,但我们假设它们确实如此。

  4. 为什么要扩展?为什么不使用接口(interface)?

最佳答案

原始结构中的模式没有解决任何实际问题。您需要将它们与一般的 SOLID 原则混合起来。对于示例问题,您可以在装饰器之上实现构建器模式。您将拥有一些 DSL 类型的代码,例如

Builder.aPizza().withCheeze(someCheeze).addTopping(someTopping).and(someOtherTopping).build();

使用此模式/样式,您可以验证对象的中间状态,甚至可以在调用 build() 方法时验证对象的最后阶段。

关于java - 装饰模式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37644223/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com