1

首先,我使用的是Objective-C,但这一点都不重要。

我的情况是:

我有两种不同的情况。我通过预处理器宏来区分它们,例如:

#ifdef USER
    do some stuff for scenario 1
#else
    do some stuff for scenario 2

这两种方案都适用于整个应用程序中的项目列表,但不同之处在于获取这些项目的方式。

在第一个中,我通过向服务器发送请求来获取项目。

在第二个中,我从本地设备存储中获取它们。

我现在拥有的是实施的第二种情况。我有一个单例类,它通过从本地存储中获取项目列表来返回给我。(就像一个传统的数据库单例)

我想添加其他场景。由于项目可以从应用程序的任何点获取,我希望这也是一个单例。

有一个单例超类,然后有两个子类实现不同的获取项目的方式是否有意义?单例层次结构对我来说听起来很奇怪。

4

2 回答 2

1

工厂结合战略

工厂作为使用另一个类来创建实例的模式,而不仅仅是使用构造函数。您很可能已经在使用 Singleton 执行此操作。

用于配置工厂在 rutime 实际创建哪种对象的能力的策略。

于 2012-12-07T10:25:30.853 回答
1

这不完全是等级制度。您提到的超类实际上是您的 2 个具体类的接口,如果您愿意,可以是单例。接口是一个抽象实体,因此任何与实例相关的术语都与它无关。

您通过使用预处理器进行场景选择来静态定义程序行为。如果您坚持这种方法并且它符合您的要求,那么您就不需要任何设计模式。在您的代码中,只需使用我上面提到的接口,它是静态实例化数据的端口。如果您想拥有更大的灵活性(这听起来很可能),您可以在运行时选择您的方案。在这种情况下,您可能会发现策略模式可用于应用场景,而工厂模式可用于实例化。

于 2012-12-07T10:29:58.163 回答