你最不能没有哪个GoF模式?(问题标题)

5
如果在未来,你只能使用四人帮的书中定义的一个经典模式,你会选择哪一个并为什么?
12个回答

21

这不是一种设计模式,但对我整本书的编程风格影响最深远的原则:

比起类继承,更倾向于对象组合。

结合另一个原则“按照接口而非实现编程”,大多数设计模式自然而然地呈现出来。

选择一个模式作为最重要的几乎是不可能的。它们都有各自的用途,并相互补充。这就像问锤子和螺丝刀哪个更有用一样。这取决于问题,有时你需要钉子,有时你需要螺钉。


2
这并没有真正回答问题,但这是一个很好的观点,我必须同意你的看法。 - Stu Mackellar

3

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

我特别喜欢抽象工厂允许你为可能会在未来发生变化的情况做好准备的方式,通过以不同的方式遵循相同的规则。

这就像抽象类允许你在代码内部定义规范,限制代码遵循那些规范,而工厂则允许你在这些规范中进行“选择”。非常美妙。


3
观察者模式

2

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


2
我会说是装饰器模式。主要是因为它已经在许多框架中被广泛使用了。
例如,如果你曾经编写过像这样的代码:
FileStream file = new FileStream("file.txt");
GZipStream compression = new GZipStream(file);
TextReader reader = new TextReader(compression);
reader.ReadAll();

那么你使用了装饰器模式。

我经常使用装饰器模式。它真的有助于将功能分离,同时保持一切“相同”。 - Quibblesome

1

监听器或观察者模式。

无法想象我一生都在轮询查看事件是否发生。

其他:

  1. 适配器(如果您不想触碰运作的代码但又没有时间理解它,或者您只是不知道怎么做,这非常有用)
  2. 状态
  3. 策略

1
如果非得选一个的话,我会选择封面上的M.C.Escher图片挂在墙上。;)

1

这是一个困难的问题,因为我发现当我学习设计模式时,我实现了很多系统,其方式与许多设计模式非常相似(特别是像创建型模式、状态、策略和模板这样的基础模式)。

现在我知道了GoF,我无法分辨出哪些模式是我自然而然发现的,对我来说,这就是一个好的模式。一个好的模式是那种使用起来非常自然,你会使用这个模式编写代码,因为它是一个好的解决方案。

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


1

我喜欢使用访问者模式。有好几次,我遇到了设计问题,一直无法解决,直到最终发现访问者模式是答案。

你可以在不改变类的情况下添加任何功能!只需在其中加入一个accept()函数即可。


0

行为型模式:

  • 状态模式 用于分布式业务逻辑;
  • 策略模式 用于上下文改变算法;
  • 迭代器模式 用于读取对象集合;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接