欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

C++设计模式之策略模式(Strategy)

发布时间:2023/11/30 c/c++ 55 豆豆
生活随笔 收集整理的这篇文章主要介绍了 C++设计模式之策略模式(Strategy) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Strategy策略模式
作用:定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。

UML图:

代码实现

#include <iostream> using namespace std;class Strategy { public:~Strategy() {}virtual void AlgrithmInterface() = 0; protected:Strategy() {} };class ConcreteStrategyA : public Strategy { public:ConcreteStrategyA() {}~ConcreteStrategyA() {}virtual void AlgrithmInterface() { cout << "ConcreteStrategyA::AlgrithmInterface" << endl; } };class ConcreteStrategyB : public Strategy { public:ConcreteStrategyB() {}~ConcreteStrategyB() {}virtual void AlgrithmInterface() { cout << "ConcreteStrategyB::AlgrithmInterface" << endl; } };/*这个类是Strategy模式的关键,也是Strategy模式和Template模式的根本区别所在。*Strategy通过“组合”(委托)方式实现算法(实现)的异构,而Template模式则采取的是继承的方式这两个模式的区别也是继承和组合两种实现接口重用的方式的区别 */ class Context { public:Context(Strategy* strategy) { this->_strategy = strategy; }~Context() { delete this->_strategy; }void DoAction() { this->_strategy->AlgrithmInterface(); } private:Strategy* _strategy; };int main() {/*Strategy模式和Template模式实际是实现一个抽象接口的两种方式:继承和组合之间的区别。要实现一个抽象接口,继承是一种方式:我们将抽象接口声明在基类中,将具体的实现放在具体子类中。组合(委托)是另外一种方式:我们将接口的实现放在被组合对象中,将抽象接口放在组合类中。这两种方式各有优缺点*/Strategy* pStr = new ConcreteStrategyA(); //策略A与B可替换Context* pcon = new Context(pStr);pcon->DoAction();pStr = new ConcreteStrategyB();pcon = new Context(pStr);pcon->DoAction();return 0; }

输出结果:

参考资料

1.  C++设计模式-Strategy策略模式

总结

以上是生活随笔为你收集整理的C++设计模式之策略模式(Strategy)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。