问题标签 [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 投票
7 回答
423 浏览

design-patterns - 具有多个值的实体的最佳设计

假设您有一个实体,例如您正在捕获其详细信息的车辆。您要捕捉的汽车被涂成红色、黑色和白色。前轮胎为普利司通 275/35-18,后轮胎为 325/30-19。有时您可能只有两个轮胎(是的,这将被视为摩托车,这是一种车辆),有时可能只有 18 个轮胎。然后有一些字段总是单值的,比如引擎大小(如果我们让我们的想象力疯狂,我们可以想到多引擎车辆,但我试图保持简单)。

我们目前处理这个问题的策略是为每个可以有多个值的字段创建一个表。这将产生大量的表(我们有一堆不同的实体有这个要求)并且闻起来有点难闻。这是最好的策略吗?如果不是,什么会更好?

0 投票
5 回答
349 浏览

c# - 关于具有许多不同子类的类型切片的设计问题

我经常遇到的一个基本问题,但曾经找到一个干净的解决方案,就是你想要为公共基类或接口的不同对象之间的交互编写行为代码。为了使其更具体,我将举一个例子;

Bob 一直在编写一款支持“酷地理效应”的策略游戏。这些都是简单的限制,例如如果部队在水中行走,他们会减慢 25%。如果他们在草地上行走,他们会减慢 5%,如果他们在人行道上行走,他们会减慢 0%。

现在,管理层告诉鲍勃他们需要新的部队。会有吉普车、船和气垫船。此外,他们希望吉普车在驶入水中时受到伤害,而气垫船将忽略所有三种地形类型。也有传言说他们可能会添加另一种地形类型,其功能比减缓单位减速和受到伤害还要多。

一个非常粗略的伪代码示例如下:

如您所见,如果 Bob 从一开始就有可靠的设计文档,情况会更好。随着单位数量和地形类型的增加,代码的复杂性也在增加。Bob 不仅需要担心确定哪些成员可能需要添加到单元界面,而且他还必须重复大量代码。新的地形类型很可能需要从基本 IUnit 接口获得的附加信息。

每次我们在游戏中添加另一个单位时,都必须更新每个地形以处理新单位。显然,这会导致大量重复,更不用说丑陋的运行时检查,它决定了正在处理的单元的类型。在此示例中,我选择了对特定子类型的调用,但这些调用是必需的。一个例子是,当一艘船撞到陆地时,它的螺旋桨应该被损坏。并非所有单位都有螺旋桨。

我不确定这种问题叫什么,但它是一个多对多的依赖关系,我很难解耦。我不希望 ITerrain 上的每个 IUnit 子类都有 100 个重载,因为我想通过耦合来干净利落。

任何关于这个问题的观点都备受追捧。也许我正在考虑一起脱离轨道?

0 投票
18 回答
183623 浏览

design-patterns - 工厂模式。什么时候使用工厂方法?

什么时候在对象中使用工厂方法而不是工厂类是个好主意?

0 投票
29 回答
325453 浏览

java - 在 Java 中实现单例模式的有效方法是什么?

在 Java 中实现单例设计模式的有效方法是什么?

0 投票
11 回答
11043 浏览

c++ - 数据流编程 - 模式和框架

我刚刚遇到了提议的Boost::Dataflow库。这似乎是一种有趣的方法,我想知道是否还有其他类似的 C++ 替代框架,以及是否有任何相关的设计模式。我没有排除 Boost::Dataflow,我只是在寻找任何可用的替代方案,以便更好地了解域和我的选择(或者在必要时自行选择)。

0 投票
13 回答
3814 浏览

design-patterns - 这种反模式/代码气味有名称吗?

首先让我说我不提倡这种方法,但我最近看到了它,我想知道是否有一个名字可以用来指出有罪的一方。所以这里。

现在你有了一个方法,你想返回一个值。您还想返回错误代码。当然,异常是更好的选择,但无论出于何种原因,您都需要一个错误代码。记住,我在这里扮演魔鬼的拥护者。因此,您创建了一个通用类,如下所示:

然后像这样声明你的函数:

此模式的一种变体是使用枚举作为错误代码而不是字符串。现在,回到我的问题:有这个名字吗?如果有,它是什么?

0 投票
5 回答
7623 浏览

model-view-controller - 你知道 PAC 设计模式的任何例子吗?

谁能指出任何使用Presentation-Abstraction-Control设计模式而不是 MVC 的网站或 Web 应用程序?像这样很容易找到桌面应用程序(例如 GIMP),但我正在网上寻找一些东西。

0 投票
5 回答
6946 浏览

c++ - C++ 中的自定义事件?

是否可以在 C++ 中创建自定义事件?例如,假设我有变量 X 和变量 Y。每当 X 发生变化时,我想执行一个将 Y 设置为 3X 的函数。有没有办法创建这样的触发器/事件?(触发器在某些数据库中很常见)

0 投票
2 回答
1112 浏览

perl - Perl 中策略模式的干净实现

如何在 Perl 中编写策略模式的干净实现?我想以一种利用 Perl 特性的方式来做这件事。

0 投票
8 回答
73618 浏览

design-patterns - shell 脚本的设计模式或最佳实践

有谁知道任何关于 shell 脚本(sh、bash 等)的最佳实践或设计模式的资源?