在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1定义(Strategy Pattern)定义一组算法,将每个算法都封装起来,并且使他们可以相互替换 也叫政策模式 2类图3实现class Strategy protected: Strategy(); public: virtual ~Strategy() = 0; virtual void doSomething()=0; }; class ConcreteStrategy1:public Strategy { public: void doSomething() { cout << "具体策略1的运算法则"<<endl; } }; class ConcreteStrategy2:public Strategy { public: void doSomething() { cout << "具体策略1的运算法则"<<endl; } }; //封装角色 class Context { private: Strategy * _str; public: Context(Strategy * st) :_str(st) {} void doAnything() { _str->doSomething(); } }; void Test { Strategy * st = new ConcreteStrategy1(); Context *con = new Context(st); con->doAnything(); } 4应用①优点 算法可以自由切换 避免使用多重条件判断.将决策权转接给高层,你传入策略我执行该就可以 扩展性良好 ②缺点 策略数量增多 所有的策略类都会暴漏在外,上层必须知道具体策略 注:这个缺点是可以通过其他方式进行弥补的eg工厂方法,代理模式,享元模式 5使用场景多个类只有在算法上稍有不同 算法需要自由切换 需要屏蔽算法规则的地方。(仿函数类似)
注意事项,一个策略家族的具体策略数量不得超过4个,否则使用混合模式解决策略类膨胀和对外暴漏的问题。 6扩展枚举策略 定义:它是一个枚举,浓缩了策略模式的枚举 枚举特性:pubic,finaly,static 所以在C++中其实就是一个一个类封装多个静态方法。(一半用作不经常改变的角色) eg Strategy::ADD(); Strategy::Sub();....
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论