gentleye 2019-05-17 13:49 采纳率: 33.3%
浏览 367
已采纳

策略模式中,如果多个子类各有特殊方法,如何设计?

通过策略模式,我们可以根据环境Context类进行调用各通用的接口方法,前提是各子类都只继承并实现了基类接口。如果各子类除了公共接口,还都有自己的特殊接口,那么该如何优化?

现在想到的就是将这些子类特殊方法也抽象到基类作为公共接口;但其实只有某个子类才会调用。

如何优化改进设计?

  • 写回答

1条回答 默认 最新

  • wallesyoyo 2019-05-17 14:17
    关注

    如果你的这些特殊子类的特殊接口,所实现的功能和名称都是一样的,那完全可以在整个Strategy类层次结构中间再抽象出一个类StrategyX,这个类继承自顶层的Strategy类,然后被你的那些特殊子类继承,并抽象出了那个特殊接口。

    这个时候就会有一个问题,你无法通过顶层的Strategy类的指针去调用这个特殊接口,你可以在Strategy类里面添加一个GetStrategyX()的方法,那些没有继承StrategyX的类这个方法返回nullptr,那些继承自StrategyX的类返回Strategy*类型的this指针。

    这样你就可以这样调用:

        Strategy* s;
        StrategyX* sx;
    
        if (sx = s->GetStrategyX())
        {
            sx->MethodX();
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 11月4日

悬赏问题

  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题