常见的GUI框架展示了哪些软件设计模式?

8
我已经是一名Python程序员7+年了,并且使用PyQt进行设计3+年...但我不是受过经典训练的计算机科学专业人士。最近我一直在学习Go,并积极关注Golang-nuts讨论列表,其中充满了极其聪明的开发者。从这个讨论组中,我看到了许多关于软件设计模式的引用,例如Observer、Reactor等。由于我不是计算机科学专业人士,所以我从未真正学习过所有这些术语和理论,但它让我想知道... 常见GUI框架(如Qt、wx、GTK)展示了哪些设计模式? 我感觉它是不同组件的模式混合,例如事件循环与信号/插槽或绑定与键值观察等等。我很想听听关于这些软件模式如何映射到这些框架的传统组件的解释或概括。
作为这个问题的次要元素:是否有GUI框架尝试采用完全不同的模式方法来解决GUI问题?Cocoa/Objective-C是否使用与其他框架相同的事件循环模式?

更新
为了更好地聚焦我的问题,并基于@HDDimon的答案,我主要想知道行为模式(通信)方面的内容:
http://en.wikipedia.org/wiki/Design_Patterns#Behavioral_patterns

1个回答

8

您好。我认为Martin Fowler的文章GUI Architectures中有最佳答案。

从这篇文章可以看出:

模型视图控制器(Model View Controller,MVC)可能是UI开发中被引用最广泛的模式,同时也是最容易出现误解的一种。我已经数不清有多少次看到被描述为MVC的东西实际上与它根本不同。说实话,这其中很大一部分原因是经典MVC的某些部分在今天的丰富客户端应用程序中并没有太多意义。但目前我们将先来看看它的起源。 MVC的核心思想是对后来的框架产生了最大影响的思想,我称之为分离呈现。分离呈现的思想是要清晰地区分模拟真实世界的领域对象和展示GUI元素的呈现对象。领域对象应该完全自包含,无需参考呈现,并且应该能够支持多个呈现方式,甚至可以同时支持多个呈现方式。这种方法也是Unix文化的一个重要组成部分,今天仍然存在,使得许多应用程序可以通过图形界面和命令行界面进行操作。
根据这篇文章,任何组件之间的最佳分割类型是结构型模式。从"The Gang of Four"的《设计模式:可复用面向对象软件的基础》(我真的想推荐你阅读这本精彩的书)中得知。
结构型模式包括:适配器、桥接、组合、装饰器、外观、享元、代理。
但在任何框架中,你都可以看到几种类型的模式混合使用:创建型模式、结构型模式、行为型模式。
我在《设计模式》书中找到了一张模式之间的关系图表,它可能对日常使用有所帮助。
更新:SO上有一个很棒的答案。

非常感谢这些信息。我对MVC非常熟悉,因为它在其他框架中也很常见。我一定会查看您提供的参考资料。但是,我也希望有人能更专注地回答流行GUI框架及其通信方法的问题。事件循环、信号插槽、KVO、消息/事件传递等。我显然可以阅读有关通用设计模式的书籍,但我想听听这些GUI框架的直接和具体的示例。还有其他额外的信息吗? - jdi

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