// 设计模式测试.cpp : 定义控制台应用程序的入口点。
// 策略模式
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
/*************************策略模式之人物示例*********************************/
//武器接口
class IWeaponBehavior
{
public:
virtual string useWeapon() = 0;
};
class SwordBehavior :public IWeaponBehavior
{
public:
string useWeapon() {
return "Sword!";
}
};
class KnigfeBehavior :public IWeaponBehavior
{
public:
string useWeapon() {
return "Knigfe!";
}
};
//人物基类
class Character{
protected:
IWeaponBehavior *weapon;
public:
void fight() {
cout<< "Fight with " << weapon->useWeapon() << endl;
}
void setWeapon(IWeaponBehavior *w) {
cout << "Changing Weapon!" << endl;
this->weapon = w;
}
};
class King:public Character
{
public:
King() {
weapon = new SwordBehavior();
}
};
//主函数
//int main()
//{
// Character *king = new King();
// king->fight();
// king->setWeapon(new KnigfeBehavior);
// king->fight();
// system("Pause");
// return 0;
//}
/*************************策略模式之鸭子示例*********************************/
//飞行方式接口
class IFlyBehavior
{
public:
virtual void fly() = 0;
private:
};
class FlyWithWings : public IFlyBehavior
{
public:
void fly() {
cout << "I can flying! " << endl;
}
};
class FlyNoWay : public IFlyBehavior
{
public:
void fly() {
cout << "I can't Fly ! " << endl;
}
};
class Rocket : public IFlyBehavior {
public:
void fly() {
cout << "I am flying with Rocket! " << endl;
}
};
//叫声方式接口
class IQuackBehavior
{
public:
virtual void quack() = 0;
private:
};
class Quack : public IQuackBehavior
{
public:
void quack() {
cout << "Quack! " << endl;
}
};
class MuteQuack : public IQuackBehavior
{
public:
void quack() {
cout << "Silence ! " << endl;
}
};
class Squeak : public IQuackBehavior
{
public:
void quack() {
cout << "Squeak ! " << endl;
}
};
//鸭子基类
class Duck {
protected:
IFlyBehavior *flyBehavior;
IQuackBehavior *qcackBehavior;
public:
virtual void display() {};
void performFly() {
flyBehavior->fly();
}
void performQuack() {
qcackBehavior->quack();
}
void setFlyBehavior(IFlyBehavior *fb) {
cout << "Changing FlyBehavior" << endl;
flyBehavior = fb;
}
void setQuackBehavior(IQuackBehavior *qb) {
cout << "Changing QuackBehavior" << endl;
qcackBehavior = qb;
}
};
class Mallard : public Duck {
public:
Mallard() {
qcackBehavior = new Quack();
flyBehavior = new FlyWithWings();
}
void display() {
cout << "I am Mallard! " << endl;
}
};
class ModelDuck : public Duck {
public:
ModelDuck() {
qcackBehavior = new MuteQuack();
flyBehavior = new FlyNoWay();
}
void display() {
cout << "I am ModelDuck! " << endl;
}
};
//主函数
int main()
{
Duck *modelDuck = new ModelDuck();
Duck *mallard = new Mallard();
modelDuck->display();
modelDuck->performFly();
modelDuck->performQuack();
modelDuck->setFlyBehavior(new Rocket());
modelDuck->setQuackBehavior(new Squeak());
modelDuck->performFly();
modelDuck->performQuack();
cout << endl;
mallard->display();
mallard->performFly();
mallard->performQuack();
system("Pause");
return 0;
}
C++:设计模式之策略模式(例子)
最新推荐文章于 2024-09-04 01:15:28 发布