2

我有两个类使用一种方法 StoreData(data) 编码到单个接口 IStore - 一个类将数据发送到写入数据库的 Web 服务,另一个将数据直接写入数据库。(工厂模式)

public IStore GetStorageClass(StorageType type)
{
    if (type == StorageType.WebService)
        return new WebService();
    else 
        return new DatabaseStore();
}

现在,DatabaseStore 类需要一个连接字符串才能工作。问题是,谁负责向 DatabaseStore 提供连接字符串?如何提供?我想到了:

  1. 工厂只知道要传递给 DatabaseStore 的连接字符串

  2. DatabaseStore 构造函数从最终用户提供的配置中读取它。

  3. GetStorageClass 的调用者虽然不知道确切的实现,但传递参数和值的字典,其中参数是连接字符串(调用者知道使用数据库需要连接字符串)

我应该选择哪个选项,我是否在这里正确使用了工厂模式?感谢帮助!

4

1 回答 1

1

责任在于包含 GetStorageClass 的类。它要么是使用提供给其构造函数的连接字符串值构造的,要么具有从另一个源读取值的私有方法。

除了 StorageType 之外,还传入一个键值存储太模糊了,API 的使用者只想获取 IStore 的一个实例,而不是对其进行配置。

如果您需要为特定的 IStore 实现进行配置,您可能希望为该实现实现构建器模式并将构建器注入工厂。

于 2013-03-12T17:22:00.010 回答