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

Luí*_*rme 5 oop design-patterns

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

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

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

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

JP *_*oto 3

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

鉴于此,您绝对可以将对象的创建包装到工厂中,并允许用户向工厂指定哪些功能是重要的。您可以更进一步,使用控制反转模式,允许调用者实例化并向您提供一个存储机制以供使用,但这对于您想要做的事情来说似乎有点过分了。