Strategy设计模式

Strategy设计模式举例。

看图:

代码实现:

cpp 复制代码
#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. 结合本例,图中的聚合/集合该如何理解?
相关推荐
he___H1 小时前
Spring中的设计模式
java·spring·设计模式
程序员小寒2 小时前
JavaScript设计模式(八):命令模式实现与应用
前端·javascript·设计模式·ecmascript·命令模式
程序员榴莲9 小时前
设计模式之GoF设计模式(单例模式
单例模式·设计模式
tiger从容淡定是人生10 小时前
可审计性:AI时代自动化测试的核心指标
人工智能·自动化·项目管理·策略模式·可用性测试·coo
砍光二叉树11 小时前
【设计模式】行为型-解释器模式
设计模式·解释器模式
砍光二叉树11 小时前
【设计模式】行为型-备忘录模式
设计模式·备忘录模式
光影少年11 小时前
实现发布订阅模式
前端·javascript·设计模式
无籽西瓜a11 小时前
【西瓜带你学设计模式 | 第十一期 - 模板方法模式】模板方法模式 —— 流程骨架与钩子实现、优缺点与适用场景
java·后端·设计模式·软件工程·模板方法模式
砍光二叉树1 天前
【设计模式】行为型-中介者模式
设计模式·中介者模式
sanzk1 天前
工厂方法模式
设计模式