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. 结合本例,图中的聚合/集合该如何理解?
相关推荐
钦拆大仁3 小时前
Java设计模式-单例模式
java·单例模式·设计模式
娟宝宝萌萌哒11 小时前
智能体设计模式重点
人工智能·设计模式
Andy&lin12 小时前
【医疗】智慧病房APP原型模板
设计模式·产品运营·人机交互·交互·健康医疗
Engineer邓祥浩12 小时前
设计模式学习(22) 23-20 解释器模式
学习·设计模式·解释器模式
钦拆大仁12 小时前
Java设计模式-状态模式
java·设计模式·状态模式
Engineer邓祥浩12 小时前
设计模式学习(24) 23-22 策略模式
学习·设计模式·策略模式
我真的是大笨蛋13 小时前
MVCC解析
java·数据库·spring boot·sql·mysql·设计模式·设计规范
芒鸽13 小时前
基于 lycium 适配鸿蒙版 Nginx 的解决方案
nginx·harmonyos·策略模式
Engineer邓祥浩14 小时前
设计模式学习(25) 23-23 责任链模式
学习·设计模式·责任链模式
半桔14 小时前
【设计模式】策略模式:可插拔算法,从硬编码到灵活适配,体会“算法解耦“思想
java·c++·算法·设计模式·策略模式