设计模式学习-Strategy策略模式

纸上得来终觉浅,看一遍没啥感觉。重新用C++写一遍有一点点感觉。记下来慢慢看,希望有更多感觉。。。

1、类说明

Duck 鸭子接口;

RedHeadDuck鸭子种类之一,继承于Duck

RubberDuck鸭子种类之一,继承于Duck


FlyBehavior 飞行行为类,

FlyWithWings 飞行行为之一,继承于FlyBehavior;

FlyNoWay 飞行行为之一,继承于FlyBehavior;


QuackBehavior 叫声行为类

Quack叫声行为之一,继承于QuackBehavior;

Squeak叫声行为之一,继承于QuackBehavior;

代码:

#include<iostream>

using namespace std;

//飞行行为类
class FlyBehavior
{
public:
	FlyBehavior::FlyBehavior()
	{
	}
	virtual void fly()
	{
	}
};

class FlyWithWings : public FlyBehavior
{
public:
	void fly()
	{
		cout << "我会飞..." <<endl;
	}
};

class FlyNoWay : public FlyBehavior
{
public:
	void fly()
	{
		cout << "我不会飞..." <<endl;
	}
};

//尖叫行为类
class QuackBehavior
{
public:
	virtual void quack()
	{
	}
};

class Quack : public QuackBehavior
{
public:
	void quack()
	{
		cout << "我会呱呱叫..." <<endl;
	}
};

class Squeak : public QuackBehavior
{
public:
	void quack()
	{
		cout << "我不会叫..." <<endl;
	}
};

//鸭子类
class Duck
{
public:

	FlyBehavior* flybehavior;
	QuackBehavior* quackBehavior;

	void performQuack()
	{
		quackBehavior->quack();
	}
	void performBehavior()
	{
		flybehavior->fly();
	}
	virtual void display() = 0;

};

class RedHeadDuck : public Duck
{
public:
	RedHeadDuck::RedHeadDuck()
	{
		flybehavior = new FlyWithWings();
		quackBehavior = new Quack();
	}
	void display()
	{
		cout << "我是红头鸭..." <<endl;
	}
	RedHeadDuck::~RedHeadDuck()
	{
		delete flybehavior;
		delete quackBehavior;
	}
};

class RubberDuck : public Duck
{
public:
	RubberDuck::RubberDuck()
	{
		flybehavior = new FlyNoWay();
		quackBehavior = new Squeak();
	}
	void display()
	{
		cout << "我是橡皮鸭..." <<endl;
	}
	RubberDuck::~RubberDuck()
	{
		delete flybehavior;
		delete quackBehavior;
	}
};

int main()
{
	Duck* duckA;
	duckA = new RedHeadDuck();
	duckA->display();
	duckA->performBehavior();
	duckA->performQuack();
	cout << "..............."<<endl;

	delete duckA;
	duckA = new RubberDuck();
	duckA->display();
	duckA->performBehavior();
	duckA->performQuack();
	getchar();
	return 0;
}

每个鸭子都有具体的行为方式,Duck有表现行为方法performQuack(),performBehavior(),具体的行为动作由FlyBehavior的子类的方法决定。

Duck的变量flybehavior和quackBehavior在不同的子类中指向不同的行为类型。使得子类成为具体行为模式的决定者。

策略模式:

定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。


《Head First 设计模式》

参考资料:http://www.cnblogs.com/wanggary/archive/2011/04/07/2008796.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值