Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 桥梁还是工厂模式?_C#_Design Patterns_Factory_Bridge - Fatal编程技术网

C# 桥梁还是工厂模式?

C# 桥梁还是工厂模式?,c#,design-patterns,factory,bridge,C#,Design Patterns,Factory,Bridge,在我的设计中,我第一次设计的是工厂模式。但有人建议使用更好的桥型 这是我的设想: 我只想知道哪种模式最适合这种情况。。我弄糊涂了 我的情景总结如下: 想象一个黑匣子,这个黑匣子接收一个名为 配置和it输出是一个问题对象 这个黑匣子一开始我给工厂打电话,但后来我 需要在我的抽象类中使用泛型来更具体一些, 一个人告诉我最好使用这座桥 此外,在我的工厂中,需要在 构造函数,还可以修改实例。。所以这部分是 拐杖的 我不太了解这种模式,所以我只想使用这个简单的场景,我该怎么办?你不想要一座桥。它通常有一个

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

这是我的设想:

我只想知道哪种模式最适合这种情况。。我弄糊涂了

我的情景总结如下:

想象一个黑匣子,这个黑匣子接收一个名为 配置和it输出是一个问题对象

这个黑匣子一开始我给工厂打电话,但后来我 需要在我的抽象类中使用泛型来更具体一些, 一个人告诉我最好使用这座桥

此外,在我的工厂中,需要在 构造函数,还可以修改实例。。所以这部分是 拐杖的


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

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

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


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

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

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


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

您可以使用参数化工厂模式,我不确定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用记事本编写的代码可能无法编译,但我希望想法很清楚

您可以使用参数化的工厂模式,我不确定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代码是用记事本编写的,因此可能无法编译,但我希望这个想法是明确的,从技术上讲,这并不重要,我不认为您的体系结构会从切换到桥接器中受益。原因如下:

当您的层次结构有两个不同的自由度时,桥接非常有用—您的层次结构似乎有:第一个是问题,第二个是配置

在bridge中,您将提取一个层次结构并将其注入到另一个层次结构中。例如,您有一个抽象类问题,它有自己的层次结构问题,VeryDifficultProblem,您从另一个层次结构ConcreteConfiguration1等注入了一个实现


这里至关重要的是两个层次。如果您的问题不是形成类层次结构,而是希望指定带有接口的契约,以便实现类可以来自层次结构的不同子树,那么桥接将是不自然的,我将坚持使用工厂。而且我认为,当使用接口而不是抽象类来实现它时,桥接没有多大意义。

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

当您的层次结构有两个不同的自由度时,桥接非常有用—您的层次结构似乎有:第一个是问题,第二个是配置

在bridge中,您将提取一个层次结构并将其注入到另一个层次结构中。例如,您有一个抽象类问题,它有自己的层次结构问题,VeryDifficultProblem,您从另一个层次结构ConcreteConfiguration1等注入了一个实现


这里至关重要的是两个层次。如果您的问题不是形成类层次结构,而是希望指定带有接口的契约,以便实现类可以来自层次结构的不同子树,那么桥接将是不自然的,我将坚持使用工厂。我认为,当使用接口而不是抽象类来实现它时,Bridge没有多大意义。

您可以发布这个场景的摘要吗?@oleksii当然,让我补充一下!你能发布这个场景的摘要吗?@oleksii当然,让我补充一下!更重要的是…不用担心使用模式X解决问题。只需解决问题。如果模式X是自然的解决方案,它将以某种形式出现。@cHao我非常喜欢最后的评论。我想有时候我会变得复杂,因为我在寻找正确的模式,但正如你所说,这些模式是天生的!更重要的是…不用担心使用patt解决问题
解决这个问题。如果模式X是自然的解决方案,它将以某种形式出现。@cHao我非常喜欢最后的评论。我想有时候我会变得复杂,因为我在寻找正确的模式,但正如你所说,这些模式是天生的!一开始我就是这样想的。我对此表示怀疑,因为我的接口是泛型的,我见过很多这样的类,但最底层的类是非泛型类。这没关系吧?我一开始就是这么想的。我对此表示怀疑,因为我的接口是泛型的,我见过很多这样的类,但最底层的类是非泛型类。所以这不重要?