6

我们大多数人已经使用过MVCstrategy等休闲模式。

但是对于不寻常的问题,肯定有一些不寻常的解决方案,我很想听听。

4

10 回答 10

16

仅崩溃软件: http ://www.usenix.org/events/hotos03/tech/full_papers/candea/candea_html/ 摘要

仅崩溃程序安全崩溃并快速恢复。只有一种方法可以阻止此类软件——通过使其崩溃——并且只有一种方法可以启动它——通过启动恢复。仅崩溃系统是从仅崩溃组件构建的,并且使用透明组件级重试可隐藏最终用户的系统内组件崩溃。在本文中,我们提倡互联网系统的仅崩溃设计,表明它可以导致更可靠、可预测的代码和更快、更有效的恢复。我们提出了有关如何构建这种仅崩溃的 Internet 服务的想法,将成功的技术发挥到逻辑上的极致。

于 2008-09-20T01:40:59.987 回答
5

这更像是一种反模式,但我已经看到了我所说的“将所有内容保存在一个地方”模式。这是一个大型应用程序,其中所有非本地变量,对于每个类,每个类,都存储在一个名为 P(用于参数)的类中。顺便说一句,所有静态变量都保存在一个名为...等待它... S 的类中。

无论如何,不​​知何故,这个项目变得相当大,突然之间,没有任何效果。(我是在这个时候被录用的)。令人惊讶的是,该程序并没有崩溃,它只是有大量的副作用,使应用程序运行起来很糟糕。可以想象,多个线程都访问 P 和修改变量,没有锁定或同步。

我告诉你,这真是一个值得一看的景象。

公司开了一个新办公室,雇了3个人来工作,我就是其中之一。我们得到了程序并被告知要修复它。我们花了几天时间坐在周围只是拍拍我们的额头。我现在脸上有一个永久性的掌纹。

其他有趣的...变量名为“fudgeFactor”。仍然不知道那做了什么。

获取下一个ASCII字符的方法...

char getNextChar(char previous) {

switch (previous)
case 'a': return b;
case 'b': return c;
...
case 'z': return a;
}

不管怎样,这就是我的有趣模式……加上一些额外的有趣之处。

于 2008-09-19T20:17:32.447 回答
4

去年我一直在维护一个用 LANSA 编写的 Windows 应用程序,其中焦点是通过将所有控件设置为 tabStop = false 来管理的,除了两个隐藏按钮(PrevFocus 和 NextFocus)。加载表单时,焦点被设置到一个字段,并且该字段的名称存储在跟踪变量中(恰当地命名为“FocusField”)。当用户使用 tabs(或 shift-tabs)改变焦点时,相应按钮的 GotFocus 事件就会运行。该函数内部是一个案例语句(选择案例 FocusField)。根据当前关注的字段,运行验证逻辑,并且可能,焦点更改为另一个字段。

大多数控件的 GotFocus 事件会查看 FocusField 的当前值,然后调用 LostFocus 函数,该函数对 FocusField 执行相同的 case 语句,以便验证先前聚焦的字段。

正如您可能猜到的那样,这使得将 UI 与逻辑分开是不可能的,并且维护起来令人难以置信。重写这些表单以使用简单的 Validate 方法来验证所有输入并让正常的选项卡属性(TabOrder、TabStop 等)发挥它们的魔力通常会导致代码减少 50% 并大大提高表单的可靠性。

我不知道这种模式起源于何处,尽管它可能是由 RPG/绿屏程序员转变为编写应用程序的 WinForms 开发人员的梦想。

于 2008-12-24T19:10:58.793 回答
2

访问者第一次在处理大量图形程序时卡住了我,作为对复杂结构进行操作的一种非常优雅的方式。

除了 mvc(它本身不是模式)之外,就其复杂性和解决问题的潜力而言,它是“模式之王”。

于 2008-09-19T20:23:39.360 回答
2

Fowler的Fluent Interface是一个非常有趣的模式。我也一直对抽象工厂、策略和状态模式情有独钟。

如果可以的话,我最近编写了一个“模式”,我称之为朋友类模式,有些人可能会觉得它对限制没有 C++ 风格朋友类的语言中私有字段访问器的可见性很有趣或有用。

于 2008-09-19T20:24:58.467 回答
2

与其说是一种模式,不如说是依赖注入和控制反转

于 2008-10-12T23:48:11.580 回答
2

我记得当我第一次阅读GOF 中的享元模式时。他们使用的例子是文字处理器;他们指出了使用独立对象来表示每个角色的缺点。享元模式鼓励将可共享的、内在的、不可变的状态与不可共享的、外在的、可变的状态分开。对我来说,当时,它是那些“啊哈!”之一。这些时刻真正拓宽了我的视野,并影响了我的设计至今。

我的一个朋友建议策略模式本质上是祖先模式。许多其他模式(桥接、装饰器、代理、状态等)只是策略的更精细应用。我记得我和他争论了很长时间,战略和状态之间确实存在差异。

于 2012-11-08T00:09:04.190 回答
1

不,那是关于 DP 书籍的,而这个线程是关于特定模式的。

口译员和享元从 4 本书的帮派中浮现。

我认为 sw 开发人员工具箱中的 Bridge 和 Mediator 是强大而深入的模式。

于 2008-09-19T20:15:37.193 回答
1

在我不得不直接使用ASM库操作 Java 字节码之前,我从来没有看到访问者模式的意义。令人惊讶的是,这种模式在多大程度上简化了原本非常复杂的任务。

当您想编写自己的重构插件时,大多数 Java IDE 也使用该模式。您提供一个访问者对象,它会在AST周围传递以进行所需的任何更改。

于 2008-09-19T20:30:08.377 回答
0

出于显而易见的原因,您将遇到的最有趣的设计模式是您自己创建的。

这并不是说它将是最好的设计模式,只是最有趣的。

于 2008-09-19T20:27:57.163 回答