设计模式:都有哪些新的,现有的在哪里使用?

Posted

技术标签:

【中文标题】设计模式:都有哪些新的,现有的在哪里使用?【英文标题】:Design patterns: what are some new ones, where are the existing ones used?设计模式:有哪些新的,现有的在哪里使用? 【发布时间】:2009-09-14 07:15:50 【问题描述】:

我的一门课程的可选作业。关于这两个主题之一的 30-45 分钟演示/案例研究:

    现实项目中当前存在的设计模式示例:它们解决了什么问题,为什么它们比其他技术更好,等等 新的设计模式,它们解决了哪些其他设计模式无法解决的问题等

请注意,“新”和“现有”是指 GoF 书籍和 the design patterns listed within。

对于第一个,源代码不是必需的,但它可能是一个加号,所以一个开源项目是最好的。

对于第二个,我基本上需要能够为每种模式提供类似于 GoF 书中的描述,并提供适当的动机、示例等。

任何人有一些好的想法/指针?

【问题讨论】:

【参考方案1】:

您可以从阅读其他一些模式书籍开始:

Patterns of Enterprise Application Architecture xUnit Test Patterns Enterprise Integration Patterns Implementation Patterns Domain-Driven Design

【讨论】:

虽然建议不错,但对于演示的最终目标而言,这可能有点贵。另一方面,您是否知道这些书是否同样(类似于 GoF)易于用作参考资料(模式字典)。【参考方案2】:

    SVN 项目是客户端/服务器模式的一个很好的例子,尽管这更像是一种架构模式而不是设计模式本身,但您可能会发现它很有用(而且它是开源的)。

    看看设计文档,信息量很大的大picture。

    访问者模式在 Eclipse 中被广泛使用。查看GEF/Draw2D(布局)或JDT(核心)以获取一些示例。 (同样两者都是开源的。)

实际上,如果您查看 Draw2D 或 Eclipse 的代码,您会注意到所使用的大量设计模式。工厂、复合材料、命令、备忘录(和模型-视图-控制器,但这又是架构)。只需抓住一个项目并寻找它们,在documentation 中寻找一些关于在哪里寻找的指针。

【讨论】:

【参考方案3】:

您的问题中“存在哪些新设计模式”部分很难回答,因为:

GoF 书中列出的设计模式在某些语言中存在新的实现。例如,可以使用委托在 .NET 中编写观察者模式。

存在不同类型/种类的设计模式,具体取决于应用它们的层。例如“存储库模式”。 例如,这是一种不属于 GoF 书中的模式,因为它作用于比该书中列出的更高级别/层。这是在应用程序的“域层”中使用的模式。就像“规范模式”一样。

【讨论】:

【参考方案4】:

有大量的设计模式 wiki 类型的网站 - 仅举几例:

WikiPedia - Software design patterns http://ajaxpatterns.org/ http://www.uidesignpatterns.org/ http://perldesignpatterns.com/

就一个非常明显的模式Model-View-Controller 已在许多应用程序中使用,并且不在有关该主题的原始 GoF 书中。尽管正如 NomeN 在 cmets 中提到的,它更像是一种架构设计模式,但在有关设计模式主题的演讲中可能值得一提。

Null Object Pattern 是另一个常见的,jQuery 使用它。当您不匹配任何与它的主选择器函数匹配的对象时,将返回一个空对象(仍然具有所有正常函数)而不是“null”。

【讨论】:

像客户端-服务器这样的 MvC 和更通用的分层架构是架构模式,而不是更底层的设计模式,这就是它们没有出现在 GoF 中的原因。老师可能对差异很敏感,尽管如果 OP 在他的演示文稿中指出这一点,他可能会让它滑落。【参考方案5】:

没有新的设计模式。四本书中的那些(模数)几乎是正交和完整的。还有很多其他类型的模式。

【讨论】:

【参考方案6】:

只需专注于 Reactor 模式(不是在 GoF 中),您就可以轻松地填补那么多时间。有关不同实现的信息和示例,请参阅 this Wikipedia link(Twisted for Python 就是其中之一)。

【讨论】:

以上是关于设计模式:都有哪些新的,现有的在哪里使用?的主要内容,如果未能解决你的问题,请参考以下文章

设计师必备工具都有哪些?你是不是正在使用?

打算使用laravel现有的数据库上做开发,会都有哪些坑

Java中常用的设计模式都有哪些?请详细说明一下工厂模式。

C#设计模式-状态者模式

Android Support Library 23.2都有哪些新东西

为后代设计接口