Design patterns 在解决问题或更好地设计方面,哪些模式是有用的?

Design patterns 在解决问题或更好地设计方面,哪些模式是有用的?,design-patterns,Design Patterns,我认为,像立面、适配器、包装器、桥梁等图案描述了这些事情的处理方式 我认为单件或工厂是微不足道的——我们大多数人都会在适当的时候找到自己 MVC是有用的,但它通常通过一个框架来使用,而不是直接使用 那么,在帮助我们更好地解决问题或(通过直接使用该模式)进行更好的设计方面,哪些模式是非常重要和有用的呢? 观察者通常是盘子上的服务器,但知道它可以让你更容易地想到它 我目前正在努力解决访问者模式,这似乎是一个非常重要的问题,并且有助于设计 当然,出于其他原因了解诸如Singleton和MVC之类的模

我认为,像立面、适配器、包装器、桥梁等图案描述了这些事情的处理方式

我认为单件或工厂是微不足道的——我们大多数人都会在适当的时候找到自己

MVC是有用的,但它通常通过一个框架来使用,而不是直接使用

那么,在帮助我们更好地解决问题或(通过直接使用该模式)进行更好的设计方面,哪些模式是非常重要和有用的呢?

观察者通常是盘子上的服务器,但知道它可以让你更容易地想到它

我目前正在努力解决访问者模式,这似乎是一个非常重要的问题,并且有助于设计


当然,出于其他原因了解诸如Singleton和MVC之类的模式是很有用的。 如果您了解单例设计模式,那么您可以更好地进行通信,并以标准方式进行通信,从而使代码更易于理解

您还可以阅读有关它的问题,从而更好地编写代码

同样,即使您没有使用MVC,了解MVC也可以使您的设计更好

上述原因不在问题范围之内

这个问题的背景是,我经常看到带有“使用过模式”的工作规范。
并不是说我应该直截了当地回答,而是它让我思考。我不能说我使用模式仅仅是因为我所做的可以称为包装器或桥接器,或者因为我使用了使用Observer或MVC的GUI框架。

应用头先设计模式策略来学习模式。首先了解使用和限制,然后了解实际模式

1) 工厂与抽象工厂

2) 建筑商

3) 模板

4) 空对象,但更喜欢googleguicelibrary
Optional

5) 工厂法

有一些是有用的清洁设计


不要过早过度使用模式。首先要牢牢把握原则。然后所有的模式都会自然而然地出现。

不要拘泥于某一套模式去了解和使用。将设计原则应用于代码,并进行重构以删除重复的代码——这是所有设计模式的基础。此外,了解SOLID将使您清楚了解每个模式解决的问题。稍后,当您解决了一些问题或删除了重复的代码时,您将了解到您已经在系统中应用了策略、观察者、单例和适配器

当你从另一个角度开始——首先学习设计模式,然后就像。你肯定会尝试应用模式,即使你真的不需要它们。此外,您经常会应用错误的模式


最后,我对模式进行了重构(在90%的情况下)。例如,我只在看到恼人的重复条件逻辑(即它们解决的问题)时才创建状态或策略,而不是因为我预见到我的代码将不断发展,我将需要10种算法实现。否则,您可以通过为将来添加新的无用类来使代码过于复杂:

我认为这是学习设计模式的开发人员最常见的错误之一:认为它们是一些需要学习的方法。虽然设计模式是解决一些问题的方法,但大多数情况下,您会发现自己在不知情的情况下使用它们

阅读和了解您能找到的任何设计模式都是很好的,最重要的是了解它们解决了什么问题以及何时应用它们。很多模式都没有被很好地理解和错误地应用,仅仅因为它们存在并且能够解决问题并不意味着你必须在任何地方都使用它们


而且,在某一特定时间,您只使用了少量模式。最好的学习方法就是尽可能多地编写不同的软件,在学习过程中,你会学到你需要的所有模式。

使用这些模式可以使设计更具可扩展性和更清晰。关闭用于修改,打开用于扩展,这是singleton和其他一些人不允许的。工厂本质上是在编写一个方法,它是一个构造函数。我认为大多数开发人员都会在适当的时候提出这种方法。@Olav如果你谈论的是工厂方法,那么他们有自己的优势。更具可读性、更详细,这比使用多个带混淆参数的构造函数要好得多。我在这里也提到了构建器。@NarendraPathai btw Head First book按顺序提供模式:策略、观察者、装饰者、(抽象)工厂、单例、命令、适配器、模板方法、迭代器、状态、代理:)看起来他们认为这些模式是最重要的useful@lazyberezovsky就在那里!我喜欢他们让你达到最终设计的方式。这对新手来说很容易理解!!但有时没有必要重新发明轮子。这些模式是在坚实的原则基础上形成的。所以有时候我们应该直接使用它们。但是,我们也必须了解它们的工作原理和缺点。我认为最好通过重新发明轮子来了解这些模式。了解和应用设计模式的专业知识最好是通过“艰苦的方式”获得的。教授初级设计模式并不会让他更有效率,事实上你只是给了他使代码复杂化的工具。@MikeSW我同意。甚至我在编辑后的回答中也提到,构建基础知识自然会让您使用和理解模式。了解限制也很重要。@NarendraPathai当你需要轮子时,你需要它。了解车轮很好,但如果你住在北方,到处都是雪,滑雪会更适合你:)@lazyberezovsky good one!我住在印度,所以没有雪:(但你住的地方看起来像是在下雪!;)你说得对,当然,模式不是食谱,但我仍然不会忽视熟悉最常见模式的重要性。我同意,但我试图从我的问题中排除这些原因。我会尽力