通过策略模式,我们可以根据环境Context类进行调用各通用的接口方法,前提是各子类都只继承并实现了基类接口。如果各子类除了公共接口,还都有自己的特殊接口,那么该如何优化?
现在想到的就是将这些子类特殊方法也抽象到基类作为公共接口;但其实只有某个子类才会调用。
如何优化改进设计?
通过策略模式,我们可以根据环境Context类进行调用各通用的接口方法,前提是各子类都只继承并实现了基类接口。如果各子类除了公共接口,还都有自己的特殊接口,那么该如何优化?
现在想到的就是将这些子类特殊方法也抽象到基类作为公共接口;但其实只有某个子类才会调用。
如何优化改进设计?
如果你的这些特殊子类的特殊接口,所实现的功能和名称都是一样的,那完全可以在整个Strategy类层次结构中间再抽象出一个类StrategyX,这个类继承自顶层的Strategy类,然后被你的那些特殊子类继承,并抽象出了那个特殊接口。
这个时候就会有一个问题,你无法通过顶层的Strategy类的指针去调用这个特殊接口,你可以在Strategy类里面添加一个GetStrategyX()的方法,那些没有继承StrategyX的类这个方法返回nullptr,那些继承自StrategyX的类返回Strategy*类型的this指针。
这样你就可以这样调用:
Strategy* s;
StrategyX* sx;
if (sx = s->GetStrategyX())
{
sx->MethodX();
}