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. 结合本例,图中的聚合/集合该如何理解?
相关推荐
sarasuki8 分钟前
失败重试:Agent 中指数退避的正确姿势
人工智能·设计模式·agent
Zane199422 分钟前
为什么你写的 Java 代码"看着面向对象、实际是面向过程"?
设计模式
geovindu6 小时前
sql: Data Modeling Patterns
数据库·sql·设计模式·sqlserver
YHL2 天前
🎯 JavaScript 单例模式(Singleton Pattern)—— 从理论到实战
javascript·设计模式
2401_868534782 天前
网络环境规划核心考点全梳理
网络·设计模式
feiyu_gao2 天前
Cocreation Framework:一套给所有人的 AI 协作思考系统
设计模式·aigc·ai编程
善良勤劳勇敢而又聪明的老杨3 天前
【AI编程系列】MCP 常用设计模式解读
设计模式·ai编程
geovindu3 天前
java: Strategy Pattern
java·开发语言·后端·设计模式·策略模式·行为模式
码匠许师傅4 天前
【设计模式精讲】29.行为型模式总结与对比(Behavioral Patterns Summary)
c++·设计模式·uml
geovindu4 天前
CSharp: Observer Pattern
开发语言·后端·观察者模式·设计模式·c#·.netcore·行为模式