在我的设计中,我第一次设计工厂模式。但是有人建议使用更好的桥梁模式。
这是我的方案:How to improve my abstract factory pattern?
我只想知道哪种模式最适合这种情况..我感到很困惑!
我的方案摘要是:
想象一个黑盒子,这个黑盒子收到一个叫做的对象
Configuration
,输出为Problem
对象这个黑匣子一开始我叫工厂,但后来我 需要使用泛型在我的抽象类中更具体,所以, 一个人说得更好用桥。
另外,在我的工厂,需要接收输入值 构造函数,也可以修改实例..所以这部分是 cruxial。
我不太喜欢这种模式,所以我只想使用这个简短的场景,我该怎么做?
答案 0 :(得分:2)
你不需要桥梁。它曾经有一个接口,可以使用多个实现。这允许在用户不知道的情况下切换实现。 您希望将问题和配置工厂彼此相邻使用。
如果您想在用户不知情的情况下在问题和配置部分之间切换,那么您将使用网桥。
请记住,您可以根据需要同时使用多个模式,在这种情况下,您也不必在两者之间进行选择。使用您认为最有效的方法。
答案 1 :(得分:2)
从技术上讲,这并不重要,我认为您的架构不会因切换到桥而受益。原因如下:
当您的层次结构具有两个不同的自由度时,Bridge非常有用 - 您的系统似乎有:第一个是问题,第二个是配置。
在桥中,您将提取一个层次结构并将其注入另一个层次结构中。例如,您有一个抽象类Problem
,它有自己的层次结构(ProblemA
,VeryDifficultProblem
),您从另一个层次结构(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代码所以可能无法编译,但我希望这个想法很清楚