问题标签 [design-patterns]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
10 回答
4905 浏览

c# - 抽象工厂设计模式

我正在为我的公司开发一个内部项目,该项目的一部分是能够将 XML 文件中的各种“任务”解析为稍后运行的任务集合。

因为每种类型的任务都有许多不同的关联字段,所以我决定最好用一个单独的类来表示每种类型的任务。

为此,我构建了一个抽象基类:

每个任务都继承自该基类,并包含从传入的 XmlElement 创建自身以及将自身序列化回 XmlElement 所需的代码。

一个基本的例子:

然后解析器将使用与此类似的代码来创建任务集合:

所有这些都非常有效,并且允许我使用基类来传递任务,同时保留每个任务具有单独类的结构。

但是,我对 TaskFactory.CreateTask 的代码不满意。此方法接受一个 XmlElement,然后返回相应 Task 类的一个实例:

因为我必须解析 XMLElement,所以我使用了一个巨大的(实际代码中的 10-15 例)开关来选择要实例化的子类。我希望我可以在这里做一些多态技巧来清理这个方法。

有什么建议吗?

0 投票
7 回答
26184 浏览

java - Java Singleton vs static - 有真正的性能优势吗?

我正在合并一个 CVS 分支,其中一个较大的变化是用具有静态初始化块和所有静态方法的抽象类替换单例模式。

这是值得保留的东西,因为它需要合并很多冲突,我会在什么样的情况下寻找这种重构是值得的?

我们在 Weblogic 8.1(所以 JDK 1.4.2)下运行这个应用程序


对不起托马斯,让我澄清一下..

HEAD 版本具有传统的单例模式(私有构造函数、getInstance() 等)

分支版本没有构造函数,是一个“公共抽象类”,并将对象上的所有方法修改为“静态”。曾经存在于私有构造函数中的代码被移动到一个静态块中。

然后更改该类的所有用法,这会导致合并中的多个冲突。

在少数情况下进行了此更改。

0 投票
1 回答
496 浏览

asp.net - 使用 MVP - 如何正确使用事件进行测试

我刚刚开始在我正在构建(实际上是重新构建)的大型 ASP.NET 应用程序中使用 MVP 模式,我很难弄清楚我应该如何使用应用于视图的事件。

假设我在用户控件中有 2 个下拉列表,其中一个取决于另一个的值:

接口中应该如何定义 AutoPostBack 事件?它是否应该是由用户控件处理的事件,如下所示:

还是应该在接口上定义一个事件?如果这是首选模式,我该如何添加要处理和使用的事件?

0 投票
8 回答
47393 浏览

oop - 我在哪里使用代表?

现实世界中有哪些地方需要代表?我很好奇这种方法是最佳解决方案的情况或模式。无需代码。

0 投票
21 回答
370963 浏览

python - 有没有一种简单、优雅的方式来定义单例?

似乎有很多方法可以在 Python中定义单例。对 Stack Overflow 是否有共识?

0 投票
5 回答
8010 浏览

c++ - 更通用的访问者模式

很抱歉,如果我的问题如此冗长且技术性很强,但我认为其他人会对它感兴趣很重要

我正在寻找一种方法来清楚地将一些软件内部与它们在 C++ 中的表示区分开来

我有一个通用参数类(稍后将存储在容器中),它可以包含 boost::any 类的任何类型的值

我有一个(大致)这种类型的基类(当然还有更多的东西)

派生类有两个级别:第一级定义类型和与字符串的转换(例如 ParameterInt 或 ParameterString) 第二级定义行为和真正的创建者(例如从 ParameterInt 或 ParameterFilename 派生 ParameterAnyInt 和 ParameterLimitedInt通用字符串)

根据实际类型,我想添加外部函数或根据特定参数类型运行的类,而不向基类添加虚拟方法并且不进行奇怪的强制转换

例如,我想根据参数类型创建适当的 gui 控件:

当然,除非我使用 RTTI 或我自己实现它(使用枚举和 switch case),否则我无法从中理解真正的参数类型,但这不是正确的 OOP 设计解决方案,你知道的。

经典的解决方案是访问者设计模式http://en.wikipedia.org/wiki/Visitor_pattern

这种模式的问题是我必须提前知道将实现哪些派生类型,所以(将维基百科和我的代码中写的内容放在一起)我们将有以下几种:

是否有任何解决方案可以以任何其他方式获得此行为,而无需事先知道所有具体类型并且无需派生原始访问者?


编辑: Pizza 博士的解决方案似乎最接近我的想法,但问题仍然存在,并且该方法实际上依赖于 dynamic_cast,我试图将其作为一种(即使很弱)RTTI 方法来避免

也许最好在不引用访问者模式的情况下思考一些解决方案并清理我们的思想。目的只是具有以下功能:

每个“具体”参数的行为不同,而不会丢失其类型的信息

0 投票
8 回答
13622 浏览

c# - 在 C# 中,观察者模式不是已经使用事件实现了吗?

在阅读了 Head First Design Patterns 一书并使用了许多其他设计模式之后,我试图理解观察者模式。这不是已经使用 .NET Framework 中的事件实现了吗?

0 投票
5 回答
10607 浏览

html - 什么是 CSS“设计模式”的好在线资源?

任何人都可以推荐一个很好的 CSS“设计模式”的在线资源吗?

我知道软件上下文中的设计模式通常是指基于 OO 的设计模式,但我指的是更广泛意义上的设计模式:即针对常见问题/任务的通用、干净的解决方案。

此类资源的一个示例是此表格设计列表,它为您提供了有关如何使用一组 CSS 技术使表格看起来漂亮的所有信息。

其他可能有很好的解决方案的常见问题的例子是 div 上的圆角、高度可用的表单布局等。

0 投票
10 回答
20967 浏览

design-patterns - 软件中使用的设计模式有哪些现实生活中的例子

目前我正在阅读 head first 设计模式,虽然这本书很棒,但我也想看看这些设计模式是如何在现实世界中实际使用的。

如果你知道设计模式使用的一个很好的例子(最好是在 OSS 程序中,这样我们可以看看 :) 那么请在下面列出。

0 投票
2 回答
705 浏览

php - PEAR DB_DataObject 实现了什么设计模式?

DB_DataObject似乎不是 ActiveRecord,因为您不必将业务逻辑存储在“表”类中。它看起来更像是表数据网关或行数据网关,但我真的无法分辨。我需要的是可以与 DataMapper 和 DomainModel 一起使用的良好 ORM 层。有任何想法吗?