Ai
1 Star 0 Fork 0

rabbitqyh/DesignPattern

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
StrategyPattern.cpp 1.23 KB
一键复制 编辑 原始数据 按行查看 历史
yaocoder 提交于 2013-05-30 08:49 +08:00 . strategy
/*
策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,
此模式让算法的变化独立于使用算法的客户。
*/
#include <iostream>
using namespace std;
class QuackBehavior
{
public:
virtual void Quack() = 0;
};
class FlyBehavior
{
public:
virtual void Fly() = 0;
};
class Duck
{
public:
void Swim()
{
cout << "All duck can swim.\n";
};
virtual void Display() = 0;
void PerformQuack()
{
pQuackBehavior_->Quack();
}
void PerformFly()
{
pFlyBehavior_->Fly();
}
void SetFlyBehavior(FlyBehavior* pFlyBehavior)
{
pFlyBehavior_ = pFlyBehavior;
}
void SetQuackBehavior(QuackBehavior* pQuackBehavior)
{
pQuackBehavior_ = pQuackBehavior;
}
private:
QuackBehavior* pQuackBehavior_;
FlyBehavior* pFlyBehavior_;
};
class SqueakDuck:public Duck
{
void Display()
{
cout << "This is a squeak duck.\n";
}
};
class SqueakSquckBehavior:public QuackBehavior
{
public:
void Quack()
{
cout << "zi zi zi ...\n";
}
};
class SqueakFlyBehavior:public FlyBehavior
{
public:
void Fly()
{
cout << "Can' fly.\n";
}
};
int main()
{
Duck* d = new SqueakDuck;
d->SetFlyBehavior(new SqueakFlyBehavior);
d->PerformFly();
d->SetQuackBehavior(new SqueakSquckBehavior);
d->PerformQuack();
system("pause");
return 0;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/rabbitqyh/DesignPattern.git
git@gitee.com:rabbitqyh/DesignPattern.git
rabbitqyh
DesignPattern
DesignPattern
master

搜索帮助