2014-02-22 63 views
1

我已经实施了策略模式 - 是否有一个聪明的方法来处理下面的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创建另一个类,所以我想知道是否有某些我缺少的东西。

+0

你似乎已经正确地封装了一切。我不确定我了解你的问题 –

回答

3

一两个简单的选项浮现在脑海:

  1. Behavior2Behavior3继承。我只会建议这种方法,如果你可以建立一个明确的“是”关系,或者这种设计方法可能会给你以后的问题,如果事情改变Behavior2如何工作相对于Behavior3

  2. Function2()移入Behavior2Behavior3可以独立使用的帮助类。

1

如果它在你想要多一点复杂,分离IBehavior补偿更好的重用到IBehavior1IBehavior2可能是值得的。然后Behavior1将执行IBehavior1,并且Behavior3将实现这两​​个等等。这种方法将沿着单一责任和(可能)接口隔离原则的相同路线行进。

相关问题