工厂模式:将参数传递给具体类

时间:2013-03-12 17:10:46

标签: factory

我有两个类编码为单个接口IStore,其中一个方法是StoreData(数据) - 一个类将数据发送到写入DB的Web服务,另一个类将数据直接写入DB。 (工厂模式)

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 个答案:

答案 0 :(得分:1)

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

除了StorageType之外,传入一个键值存储将会过于暧昧,API的使用者只想获得一个IStore实例,而不是配置它。

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