在战略模式中,处理共享行为的最佳方式是什么?

时间:2014-02-22 16:04:39

标签: c# design-patterns strategy-pattern

我已实施策略模式 - 是否有一种智能方法来处理下面的function2()和function1()的重复?
IBehaviour界面有其他不共享功能的成员。

class Behaviour1: IBehaviour
{
    public void DoSomething()
    {
        Function1();
    }
    //other functions of IBehaviour
}

class Behaviour2 : IBehaviour
{

   public void DoSomething()
   { 
       Function2();
       Function1();
   }
   //other functions of IBehaviour
}

class Behaviour3 : IBehaviour
{
    public void DoSomething()
    {
        Function2();
    }
    //other functions of IBehaviour
}

我已经有一个类来处理这种行为。然后我意识到不同的情况需要不同的行为,所以在这个主类中,我在运行时创建一个Behavior对象。我不愿意为Function1和Function2创建另一个类,所以我想知道是否有一些我缺少的东西。

2 个答案:

答案 0 :(得分:3)

想到两个简单选项中的一个:

  1. Behavior3继承自Behavior2。我只推荐这种方法,如果你能建立一个清晰的“IS A”关系,或者如果事情因Behavior2Behavior3相关的方式发生变化,这种设计方法可能真的会给你带来问题。

  2. Function2()移动到Behavior2Behavior3可以独立使用的帮助程序类中。

答案 1 :(得分:1)

如果更好地重复使用补偿以获得更多复杂性,那么将IBehavior分为IBehavior1IBehavior2可能是值得的。然后Behavior1将实现IBehavior1,而Behavior3将实现两者,等等。此方法将与单一责任和(可能)接口隔离原则相同。