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. 结合本例,图中的聚合/集合该如何理解?
相关推荐
星原望野6 小时前
JAVA:策略模式的实战使用
java·开发语言·策略模式
前端张三7 小时前
从零构建大模型(零)——搭建配置环境
策略模式
j_xxx404_10 小时前
Linux 线程日志系统设计:从策略模式、RAII 到 pthread 线程安全与内核写入路径|附源码
linux·运维·服务器·开发语言·c++·人工智能·策略模式
workflower1 天前
具身智能研究对象:物理交互中的智能行为
设计模式·动态规划·软件工程·软件构建·scrum
折哥的程序人生 · 物流技术专研1 天前
Java 23 种设计模式:从踩坑到精通 | 抽象工厂 —— 支付/收款如何成套创建?跨平台 UI 如何一键换肤?
java·开发语言·后端·设计模式
老码观察1 天前
设计模式实战解读(八):代理模式——控制访问的隐形中间层
设计模式·代理模式
我爱cope1 天前
【Agent智能体12 | 反思设计模式-使用外部反馈】
人工智能·设计模式·语言模型·职场和发展
geovindu1 天前
python: Bounded Parallelism Pattern
开发语言·python·设计模式·有界并行模式
我爱cope1 天前
【Agent智能体11 | 反思设计模式-评估反射的影响的方法】
人工智能·设计模式·语言模型·职场和发展
nnsix1 天前
设计模式 - 迭代器模式 笔记
笔记·设计模式·迭代器模式