如果在未来,你只能使用四人帮的书中定义的一个经典模式,你会选择哪一个并为什么?
这不是一种设计模式,但对我整本书的编程风格影响最深远的原则:
比起类继承,更倾向于对象组合。
结合另一个原则“按照接口而非实现编程”,大多数设计模式自然而然地呈现出来。
选择一个模式作为最重要的几乎是不可能的。它们都有各自的用途,并相互补充。这就像问锤子和螺丝刀哪个更有用一样。这取决于问题,有时你需要钉子,有时你需要螺钉。
抽象工厂模式或者模板方法模式...但是大多数情况下使用的是抽象工厂模式。它们在许多情况下都非常有用。
我特别喜欢抽象工厂允许你为可能会在未来发生变化的情况做好准备的方式,通过以不同的方式遵循相同的规则。
这就像抽象类允许你在代码内部定义规范,限制代码遵循那些规范,而工厂则允许你在这些规范中进行“选择”。非常美妙。
我喜欢状态模式。它适用于建模,嗯,状态。在我正在编写的游戏项目中,我使用状态层级来跟踪游戏状态。它很简单但非常灵活。
FileStream file = new FileStream("file.txt");
GZipStream compression = new GZipStream(file);
TextReader reader = new TextReader(compression);
reader.ReadAll();
监听器或观察者模式。
无法想象我一生都在轮询查看事件是否发生。
其他:
这是一个困难的问题,因为我发现当我学习设计模式时,我实现了很多系统,其方式与许多设计模式非常相似(特别是像创建型模式、状态、策略和模板这样的基础模式)。
现在我知道了GoF,我无法分辨出哪些模式是我自然而然发现的,对我来说,这就是一个好的模式。一个好的模式是那种使用起来非常自然,你会使用这个模式编写代码,因为它是一个好的解决方案。
模式只是给我们提供了一种用共同语言谈论组合解决方案策略的方式。我知道我没有回答你的问题,所以我道歉。
我喜欢使用访问者模式。有好几次,我遇到了设计问题,一直无法解决,直到最终发现访问者模式是答案。
你可以在不改变类的情况下添加任何功能!只需在其中加入一个accept()函数即可。
行为型模式: