Design patterns 哪一种GoF模式是你不能离开的?

Design patterns 哪一种GoF模式是你不能离开的?,design-patterns,Design Patterns,如果将来您只能使用中定义的规范模式中的一个,您会选择哪一个?原因是什么?抽象工厂模式或模板方法模式。。。但大多是抽象的工厂模式。它们在很多情况下都非常有用 我特别喜欢Abstract Factory的方式,它允许您通过以不同的方式遵循相同的规则,为您知道您的程序将来可能会发生变化的情况做好准备 与抽象类类似,抽象类允许您在代码“内部”定义规范,限制代码遵循该规范,而工厂允许您在这些规范中“选择”。简直太美了。如果非要我选一张,我会把封面上的M.C.Escher的照片挂在墙上。) 不是一种设计模式

如果将来您只能使用中定义的规范模式中的一个,您会选择哪一个?原因是什么?

抽象工厂模式或模板方法模式。。。但大多是抽象的工厂模式。它们在很多情况下都非常有用

我特别喜欢Abstract Factory的方式,它允许您通过以不同的方式遵循相同的规则,为您知道您的程序将来可能会发生变化的情况做好准备


与抽象类类似,抽象类允许您在代码“内部”定义规范,限制代码遵循该规范,而工厂允许您在这些规范中“选择”。简直太美了。

如果非要我选一张,我会把封面上的M.C.Escher的照片挂在墙上。)

不是一种设计模式,但对我来说,这一原则无疑是对我整本书的编程风格影响最大的:

支持对象组合而不是类继承。 结合另一个原则“编程到接口,而不是实现”,大多数设计模式自然遵循


在我看来,选择一种模式作为最重要的模式是不可能的。它们都有自己的目的,相互补充。这就像问锤子或螺丝刀是否更有用。这取决于问题,有时是钉子,有时是螺丝钉。

这是一个困难的问题,因为我发现当我学习模式时,我以与许多设计模式非常相似的方式实现了许多系统(尤其是更基本的,如创造模式、状态、策略和模板)

既然我了解了GoF,我就无法在脑海中分辨出哪些模式是我自然无法发现的,而对我来说,这就是一个好模式的组成部分。好模式是一个非常自然的模式,你可以使用该模式编写代码,因为这是一个好的解决方案


模式只是给我们提供了一种方法,让我们用一种共同的方言来讨论我们的解决方案组合策略。我知道我没有回答你的问题,所以我应用了。

我不得不说单例模式。你需要一个类的实例多次使用它!它可能被认为是反模式的但这是我经常使用的


同样,抽象工厂模式也是我一直使用的模式,前期开发为我节省了数小时的重新分解时间,之后我们需要实现一组新的需求。

我喜欢访客模式。我不止一次遇到设计问题,直到我完成设计,才真正解决它纳利发现访客模式就是答案


您可以向类添加任何功能,而无需对其进行更改!只需放置一个accept()功能在那里。

我喜欢状态模式。它很适合建模,嗯,状态。对于我正在编写的一个游戏项目,我使用状态层次结构来跟踪游戏状态。它很简单,但非常灵活。

我会说。主要是因为它已经在框架中大量使用

例如,如果您曾经编写过这样的代码:

FileStream file = new FileStream("file.txt");
GZipStream compression = new GZipStream(file);
TextReader reader = new TextReader(compression);
reader.ReadAll();

然后您使用了装饰者模式。

观察者模式行为模式

  • 说明何时分发我的业务逻辑
  • 当上下文改变算法时的策略
  • 当我读取对象集合时使用迭代器

监听者或观察者模式

我无法想象我的生活会是什么样的,来检查它是否发生过

其他:

  • 适配器(如果您不想接触工作正常的代码,但没有时间了解如何操作,或者您只是不知道如何操作,那么这非常有用)
  • 状态
  • 战略

  • 我不能没有迭代器。我每天都在使用它。我很难想象没有它的生活:-)我第二常用的是装饰器/包装器。

    这并不能真正回答问题,但这是一个很好的观点,我必须同意你。单例实际上是一种反模式。这在我读过的所有设计模式书中都有。在软件工程中的第一句话,singleton模式是一种设计模式,用于将类的实例化限制为一个对象。它仍然是一种反模式。我至今还没有找到一个单身人士有帮助的例子。阻碍?当然一直都是这样,有帮助吗?一次也没有。我一直用装饰图案。它确实有助于分离功能,同时保持一切“相同”。