design-patterns - 使用类/方法的不同实现的设计模式

标签 design-patterns oop

有时我们会设计不止一种算法来获得相同的结果。例如,我编写了一个将我的数据存储在树中的类,以及另一个将大致相同的数据存储在链表中的类。

我将发布一个名为 ThingStore 的接口(interface)(抽象类),并将其子类化为 TreeThingStore 和 ListThingStore,分别使用树或链表。

但是,由于我要发布一个抽象类,我必须有人来决定使用哪个实现( 编辑 :所以调用者不会关心这个),我有这个没有问题硬编码。我不止一次需要这个,但是我没有成功地查看过 GoF 和其他设计模式目录。最相似的模式是“战略”模式,但它实现了不同的目标。

那么,是否有针对此意图的设计模式?如果没有,有人可以创建一个或告诉我为什么不应该这样做(或获得相同结果的更好方法)?

最佳答案

你会指定这样的实现有点奇怪。为什么您的调用者关心您如何实现特定功能?他应该关心的是你的数据存储是否正确地存储了数据,而不是真正关心你使用的底层数据结构。但是,假设实现在外部表示为数据存储的不同特性(例如,一种更适合大量插入,另一种更适合大量读取)。然后,由调用者指定他们想要实例化的具体类。作为类设计者,假设你以某种方式最了解,这有点冒昧。 :)

鉴于此,您绝对可以将对象的创建包装到 Factory 中。并允许您的用户向工厂指定哪些功能很重要。你可以走得更远,使用 Inversion of Control pattern你允许你的调用者实例化并给你一个存储机制来使用,但这对于你想要做的事情来说似乎有点过分了。

关于design-patterns - 使用类/方法的不同实现的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2017894/

相关文章:

Ruby - 包括两个模块,它们都有一个同名的子模块

php - 静态函数不好——但是有什么选择呢?

c# - 实现拦截器模式时出现问题

r - R中函数的运算符重载 - 奇怪的行为

php - 工厂对象创建需要其他对象的对象

java - 是否有基于依赖关系创建数据对象的创建模式?

c# - 对于实现接口(interface)的类型,你怎么能要求一个没有参数的构造函数呢?

javascript - 将状态从控件发送到框​​架

design-patterns - 数据绑定(bind)只用于 UI 吗?

c# - 异常与临时类型。什么东西可能会倒下?