我已实施策略模式 - 是否有一种智能方法来处理下面的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)
想到两个简单选项中的一个:
让Behavior3
继承自Behavior2
。我只推荐这种方法,如果你能建立一个清晰的“IS A”关系,或者如果事情因Behavior2
与Behavior3
相关的方式发生变化,这种设计方法可能真的会给你带来问题。
将Function2()
移动到Behavior2
和Behavior3
可以独立使用的帮助程序类中。
答案 1 :(得分:1)
如果更好地重复使用补偿以获得更多复杂性,那么将IBehavior
分为IBehavior1
和IBehavior2
可能是值得的。然后Behavior1
将实现IBehavior1
,而Behavior3
将实现两者,等等。此方法将与单一责任和(可能)接口隔离原则相同。