我可以使用哪种设计模式来解决这种情况?

时间:2012-12-07 10:16:36

标签: objective-c design-patterns singleton hierarchy

首先,我使用的是Objective-C,但这根本不重要。

我的情况是:

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

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

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

Factory结合Strategy

Factory作为使用另一个类来创建实例的模式,而不是仅仅使用构造函数。你最有可能在单身人士身上做到这一点。

能够配置工厂在rutime时实际创建哪种对象的策略。

答案 1 :(得分:1)

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

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