桥梁或工厂模式?

时间:2012-03-29 19:03:17

标签: c# design-patterns factory bridge

在我的设计中,我第一次设计工厂模式。但是有人建议使用更好的桥梁模式。

这是我的方案:How to improve my abstract factory pattern?

我只想知道哪种模式最适合这种情况..我感到很困惑!

我的方案摘要是:

  

想象一个黑盒子,这个黑盒子收到一个叫做的对象   Configuration,输出为Problem对象

     

这个黑匣子一开始我叫工厂,但后来我   需要使用泛型在我的抽象类中更具体,所以,   一个人说得更好用桥。

     

另外,在我的工厂,需要接收输入值   构造函数,也可以修改实例..所以这部分是   cruxial。

我不太喜欢这种模式,所以我只想使用这个简短的场景,我该怎么做?

3 个答案:

答案 0 :(得分:2)

你不需要桥梁。它曾经有一个接口,可以使用多个实现。这允许在用户不知道的情况下切换实现。 您希望将问题和配置工厂彼此相邻使用。

如果您想在用户不知情的情况下在问题和配置部分之间切换,那么您将使用网桥。

请记住,您可以根据需要同时使用多个模式,在这种情况下,您也不必在两者之间进行选择。使用您认为最有效的方法。

答案 1 :(得分:2)

从技术上讲,这并不重要,我认为您的架构不会因切换到桥而受益。原因如下:

当您的层次结构具有两个不同的自由度时,

Bridge非常有用 - 您的系统似乎有:第一个是问题,第二个是配置。

在桥中,您将提取一个层次结构并将其注入另一个层次结构中。例如,您有一个抽象类Problem,它有自己的层次结构(ProblemAVeryDifficultProblem),您从另一个层次结构(ConcreteConfiguration1等)注入一个实现。

这里至关重要的是两个层次结构。如果你的问题没有形成类层次结构,而是你想用接口指定契约(这样实现类可能来自层次结构的不同子树),那么Bridge将是不自然的,我会坚持使用Factory。我认为Bridge在使用接口而不是抽象类实现它时没有多大意义。

答案 2 :(得分:0)

您可以使用参数化工厂模式,我不确定Bridge是否可以解决您的问题。

interface IFactory<TConfiguration,TProblem> 
          where TProblem: IProblem
          where TConfiguration: IConfiguration
{
   TProblem Create(TConfiguration config);
}

class Factory<TConfiguration,TProblem>: IFactory<TConfiguration,TProblem>
          where TProblem: IProblem
          where TConfiguration: IConfiguration
{
   TProblem Create(TConfiguration config)
   {
       var problem = new Problem(config);
       ...
       return problem;
   }
}

用记事本写的NB代码所以可能无法编译,但我希望这个想法很清楚