Gof设计模式:在什么情况下的适用性

时间:2017-05-16 16:19:48

标签: design-patterns

我正在尝试了解设计模式,我已经开始使用GoF设计模式,我找到了this question in SO

我也理解还有其他类别的设计模式,如:J2EE设计模式,企业应用程序架构模式。

我怀疑是:

将GoF设计模式应用于"独立"那种应用?我很难理解如何应用GoF设计模式,比如在分布式应用程序中进行远程查找。

任何人都可以帮助我了解可以应用GoF设计模式的真实情况/应用类型。

2 个答案:

答案 0 :(得分:1)

GoF 模式可以应用于任何系统设计。如果您正在寻找具体示例,那么您正在考虑它们完全错误(根本没有违法行为)。一开始就常常这么想。

我可以说,例如,从可以说是最简单和最常见的扑克游戏开始,只有一个牌组可能是 Singleton Pattern 的候选者。 Singleton确保只有一个类的实例化。有一千种不同的情况可能就是这种情况。

相同的扑克游戏可能会使用访客模式来评估桌上的每一手牌。访问者用于迭代对象集合,并对单个对象或组合执行任何类型的操作。

与此同时,你可能会说Hand是一个由单个卡片组成的复合物,它们本身可以被认为是复合型Hand的叶子对象;在这种情况下,复合模式访问者一起使用(它们通常一起使用)与迭代器模式

观察者模式可能同时工作,因为每个玩家都将向经常驾驶游戏的经销商注册。如果游戏中有人工智能玩家,可以使用策略模式来交换用于根据不断变化的游戏动态推动AI玩家决策的算法。实际上,当我重读时,我应该在这里提到状态模式,状态机通常用于AI系统。

装饰器模式可用于向各个AI播放器添加独特的行为,或者在运行时更改绘制图形的方式,或背景噪声的多样性或两者兼而有之。在这种情况下,我可能不应该忘记提及 FlyWeight FlyWeight装饰器非常酷。

模式,而不仅仅是GoF,是一种设计哲学,旨在解决任何设计过程中典型陷阱的反模式。你可以创造他们的想象力。

模式恰恰与具体相反,因为它们促进了OOD的基本原则,如编程到接口而不是实现,或者促进较低级别的依赖性来控制更高级别的抽象,或者开放封闭原则(Open for扩展;关闭修改)就像潘多拉的盒子类比。

虽然在我看来最好将Pattern实现与它帮助我们编写的代码松散耦合,但是使用它们时需要考虑坚实的约定。每个模式都是以典型的动机和意图开发的。它们也很方便地被分类以反映这一点,因为有一个原始的反模式(并且仍然是)激发了每个模式的设计,以及某些模式的典型组合,它们非常自然地结合在一起。

一个人接近概念的方式,或者更好的是,OOD的哲学将直接影响个人有效实施模式的能力。顺便说一句,它确实有一个必要的AHH HAA!那一刻,这是他们有效和创造性使用的唯一真正的偶然事件。

答案 1 :(得分:1)

有许多可以应用GoF设计模式的示例,首先您可以查看以下网站: Design Patterns StoriesSource makingDesign patterns implemented in Java