策略模式和工厂模式如何选择?

问题描述 投票:0回答:1

当我浏览设计模式时,我对策略模式和工厂模式选择感到困惑。尽管一种是行为模式,后来是创造模式,但其中任何一种都可以实现需求。就像单个接口已被多个具体类扩展一样,并且具体实现的选择是在运行时发生的。

但是我很困惑在什么场景下应该使用哪个。 当我试图从可用的人工智能中了解时,唯一强调的一点是策略具有更精细的控制。

有人可以帮助我了解更多实际场景以及在不同场景下如何选择吗?

design-patterns
1个回答
0
投票

对于策略模式,想象一个游戏,您有一个已抽象为以下界面的游戏方法:

interface IPlayingApproach
{
   void Play();
}

要赢得比赛,您可以采取不同的方法。例如,您可以积极进攻或谨慎行事。

这些策略可以具体实施游戏方法:

public class AggressiveAttackStrategy : IPlayingApproach
{
   public void Play()
   {
      // Attack aggressively
   }
}

public class ProceedCautiouslyStrategy : IPlayingApproach
{
   public void Play()
   {
      // Proceed cautiously
   }
}


现在,可以在运行时选择适当的策略:

public void Main()
{
   var game = new Game();

   if (playerHasChosenAggressiveApproach)
   {
      game.PlayingApproach = new AggressiveAttackStrategy();      
   }
   else
   {
      game.PlayingApproach = new ProceedCautiouslyStrategy();      
   }

}

这是一个非常人为的示例,但我认为它以简单的方式演示了该模式。

最终,当您有不同的做某事的方法,并且可以在消费者不知道或不需要知道细节的情况下互换时,策略模式会很有用。

© www.soinside.com 2019 - 2024. All rights reserved.