您的位置:首页 > 文旅 > 旅游 > Strategy设计模式

Strategy设计模式

2024/12/25 23:30:21 来源:https://blog.csdn.net/m0_37567738/article/details/139203677  浏览:    关键词:Strategy设计模式

Strategy设计模式举例。

看图:
在这里插入图片描述

代码实现:

#include <iostream>using namespace std;class FlyBehavior {
public:virtual void fly() = 0;
};class QuackBehavior {
public:virtual void quack() = 0;
};class FlyWithWings :public FlyBehavior {
public:void fly() { cout << "fly with wings!" << endl; }
};class FlyNoWay :public FlyBehavior {
public:void fly() { cout << "can not fly!" << endl; }
};class Quack :public QuackBehavior {
public:void quack() { cout << "gaga!" << endl; }
};class Squeak :public QuackBehavior {
public:void quack() { cout << "fricktion !" << endl; }
};class QuackNoWay :public QuackBehavior {
public :void quack() { cout << "can not sound!" << endl; }
};class Duck {
protected:FlyBehavior *flyBehavior;QuackBehavior *quackBehavior;
public:void fly() { flyBehavior->fly(); }void quack() { quackBehavior->quack(); }virtual void display() = 0;};class RubberDuck :public Duck {
public:RubberDuck() {flyBehavior = new FlyNoWay;quackBehavior = new Squeak;}void display() { cout <<"rubber duck" << endl; };
};

细节:

  1. 在Duck类中,new的是虚类(virtual)或者虚方法类,而在RubberDuck中new的是实类。接下来,调用实类的方法时,会根据不同的实类调用不同的实方法。
  2. new FlyNoWay 也可以写成new FlyNoWay(),但是最好写成new FlyNoWay()。
  3. 结合本例,图中的聚合/集合该如何理解?

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com