什么设计最适合基于仅可用的别名加载相同类型的不同类?

时间:2014-05-07 14:08:54

标签: php oop design-patterns

我正在做一个小型引擎,将内容从一个项目迁移到另一个项目,而它使用内容的系统被分成小模块。

我有一个模块选择,应将其内容转移到另一个项目中。

这里哪种设计更合适? 我只有用户输入的模块名称,如:内容,导航,盒子,付款等......

我在想Factory,但似乎有点不对劲。也许策略?

基本上,我有一堆类,它们都共享相同的接口,但实现方式不同,因为每个模块都有不同的SQL表来获取内容以及如何将其解析给用户。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,那么答案就是工厂和战略。 Strategy对象知道如何使用特定数据源,并且Factory知道根据提供的别名为您提供哪个Strategy对象。

var dataStrategy = dataFactory.GetStrategyByAlias(alias);
dataStrategy.Insert(data);

您的具体策略类可以覆盖Alias属性以协助工厂,如下所示:

interface IDataStrategy {
    string Alias { get; }
    void Insert(MyDataClass data); 
}

class ConcreteStrategy : IDataStrategy{
    string Alias { 
       get{
           return "Some Data source alias";
       }
    }     
}

class DataFactory{
    private IDataStrategy[] _strategies;

    public IDataStrategy GetStrategyByAlias(string alias){
        return _strategies.FirstOrDefault(x => x.Alias == alias);
    }
}

如果消费对象有一个准备好的策略列表,那么Factory可能过度,因为它可能只执行相同的Linq语句。