1

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

这是我的场景:如何改进我的抽象工厂模式?

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

我的方案的摘要是:

想象一个黑匣子,这个黑匣子接收一个叫作的对象 Configuration,它输出的是一个Problem对象

这个黑盒子一开始我称之为工厂,但后来我需要使用泛型来更具体地在我的抽象类中,所以有人告诉我最好使用桥。

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

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

4

3 回答 3

2

你不想要一座桥。它曾经有一个接口,可以使用多种实现。这允许在用户不知道的情况下切换实现。您想同时使用问题和配置工厂。

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

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

于 2012-03-29T19:12:47.690 回答
2

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

当您的层次结构具有两个不同的自由度时,桥很有用- 您的自由度似乎有:第一个是问题,第二个是配置。

在桥接中,您将提取一个层次结构并将其注入另一个层次结构。因此,例如,您有一个Problem具有自己的层次结构(ProblemA, )的抽象类,并且您从另一个层次结构(等)VeryDifficultProblem注入了一个实现。ConcreteConfiguration1

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

于 2012-03-29T19:27:57.853 回答
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代码写在记事本中,所以可能无法编译,但我希望这个想法很清楚

于 2012-03-29T19:22:54.003 回答