1
5
这是一个典型的高级抽象示例问题。这个例子必须足够简单,以便于理解和演示概念,这也意味着对于许多设计模式来说,它也更容易以另一种方式实现。 也就是说,我通常看到的装饰师描述的方式是在窗口系统中。您有一个标准窗口,希望允许水平和垂直滚动窗口。您可以为窗口子类化所有可能的变化,或者您可以提供一个水平滚动条装饰器和一个垂直滚动条装饰器来执行该任务,并具有附加的好处,这样您就可以装饰其他控件,而不必再子类化更多。这(对我来说)是一个非常有效的装饰师的使用方法,它可以传达各种想法,但要为其提供示例代码则要困难得多。 |
2
2
问题是,对于“这真的会是吗”没有特别的答案。取决于程序员。编写简短示例的人可以想出他们喜欢的任何模式,但是只有当您知道系统的其余部分时,您才能决定结构。 我相信当你给 名称 它变成了 事情 你必须学习,就像 梯形法则 -我认为这实际上是常识,你知道这个领域。不要把装饰图案看作是一种工具,它只是实现所需功能的一种方法。如果一个counter类包装一个整数,那是一个装饰模式,还是我们不关心? ID以您能想到的最合理的方式对其进行编码,使用设计模式作为指导/想法。试着忘记他们的名字-让学习模式改善你的编程。(但在面谈前再看看他们!) |
3
0
他们试图教授这个概念,而不是如何创建一个咖啡订购系统。使用的装饰器模式是更复杂的情况,如用户界面。 可以在JavaIO系统等地方使用装饰器模式。BufferedReader是一个阅读器的修饰器。 这种模式非常有用,在某些地方它会找到很好的用途。 |
4
0
像其他人提到的那样,在一本书所需要的一个简单的例子中,正在被解释的原则可能会有点丢失,但是在现实世界中,当您编程更大更复杂的系统时,模式将是维护性的更好选择。 我认为您在示例中遗漏的一点是,装饰器模式是关于添加行为的。在头一个例子中,行为是计算成本。 假设类是按照您描述的方式实现的,使用数组,然后合计成本。没关系,你可以这样做,加上咖啡和配料的总成本。但是,现在说政府对咖啡征收重税,因为他们认为咖啡因对你有害,他们希望人们少喝。现在,你打算如何在饮料中增加税收计算?您肯定不想修改原始类,因为这将违反打开/关闭原则。你也可以扩大课程范围,增加行为,但这意味着你可能需要扩大课程范围,让你的商店里所有含有咖啡因的食品/饮料都可以使用。这会变得一团糟,你可能会有很多类需要扩展。最后一个选项是使用decorator模式,并动态地将纳税计算行为添加到您想要的任何内容中。这将在不违反开放/关闭原则的情况下解决问题,或者是扩展可能几十个类的噩梦。 这就是装饰图案的意义所在。 |
Vedant · 如何解决python啦啦队长问题?[已关闭] 2 年前 |
cobby · 在战略模式中使用工厂模式? 2 年前 |
Nobody · Java中带while循环的三角形模式 2 年前 |
Eduard Stefanescu · 如何在层之间传输异常? 6 年前 |
D. Schreier Talha Noyon · 对于目录中的每个类 6 年前 |
Tanvi Jaywant · 如何重载类 6 年前 |