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. 结合本例,图中的聚合/集合该如何理解?
相关推荐
wrx繁星点点1 小时前
状态模式(State Pattern)详解
java·开发语言·ui·设计模式·状态模式
金池尽干3 小时前
设计模式之——观察者模式
观察者模式·设计模式
也无晴也无风雨3 小时前
代码中的设计模式-策略模式
设计模式·bash·策略模式
捕鲸叉12 小时前
MVC(Model-View-Controller)模式概述
开发语言·c++·设计模式
wrx繁星点点13 小时前
享元模式:高效管理共享对象的设计模式
java·开发语言·spring·设计模式·maven·intellij-idea·享元模式
凉辰13 小时前
设计模式 策略模式 场景Vue (技术提升)
vue.js·设计模式·策略模式
菜菜-plus13 小时前
java设计模式之策略模式
java·设计模式·策略模式
暗黑起源喵13 小时前
设计模式-迭代器
设计模式
lexusv8ls600h15 小时前
微服务设计模式 - 网关路由模式(Gateway Routing Pattern)
spring boot·微服务·设计模式
sniper_fandc17 小时前
抽象工厂模式
java·设计模式·抽象工厂模式