• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
看看这个是有什么用
那这个呢
博客园    首页    新随笔       管理    订阅  订阅
04_Stragegy Method

motivation

Bad Smell:当闻到这bad smell时, 算法多变(很多if else、case), 就应该考虑Strategy Method了.

破坏OCP(开放封闭原则)

if(A)
    do_a();
else if(B)
    do_b();
else if(C)
    do_c();
else if(D)
    do_d();

当有E情况发生的时候,那么这个时候,又要修改此处的代码,从而造成该文件,喝依赖该文件的代码重新编译(二进制不能复用)。

已经可以发现此处就是变化的地方

策略模式

class Stagety{
public:
    do_();
};


class AThing: public Strategy{
public: 
    do_(){
    // do a ..
    }
};
class BThing: public Strategy{
public: 
    do_(){
    // do b ..
    }
};


class worker{
public:
    worker(){
    new stragegy = Factory()->NewStrategy();}

    doThings(){
    strategy->do_();  //多态调用。
    }
private:
    Stragety* strategy;
    
};

posted on 2019-11-24 16:21  明月入怀  阅读(171)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3