《Head First 设计模式》C++实现【策略模式(Strategy Pattern)】
摘要
《Head First 设计模式》书中第2章——策略模式(Strategy Pattern)的C++代码实现。
策略模式(Strategy Pattern):定义了算法簇,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
实现代码
//《Head First 设计模式》C++实现【策略模式(Strategy Pattern)】
// 定义了算法簇,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
#include <iostream>
using namespace std;
//接口
class CFlyBehavior
{
public:
virtual void Fly() = 0;
};
class CQuackBehavior
{
public:
virtual void Quack() = 0;
};
class CDuck
{
public:
CFlyBehavior *p_fly_behavior;
CQuackBehavior *p_quack_behavior;
virtual void Display() = 0;//every ducks is different
void Swim()
{
printf("All duck able to swiming.\n");
}
void PerformFly()
{
p_fly_behavior->Fly();
}
void PerformQuack()
{
p_quack_behavior->Quack();
}
void SetFlyBehavior(CFlyBehavior *p_fly_behavior)
{
this->p_fly_behavior = p_fly_behavior;
}
void SetQuackBehavior(CQuackBehavior *p_quack_behavior)
{
this->p_quack_behavior = p_quack_behavior;
}
// 鸭子的其他方法……
};
//行为对象
class CFlyWithWings : public CFlyBehavior
{
public:
void Fly() override
{
printf("I'm flying!!\n");
}
};
class CFlyNoWay : public CFlyBehavior
{
public:
void Fly() override
{
printf("I can't flying.\n");
}
};
class CQuack : public CQuackBehavior
{
public:
void Quack() override
{
printf("Quack quack quack ...\n");
}
};
class CSQuack : public CQuackBehavior
{
public:
void Quack() override
{
printf("Squack squack squack ...\n");
}
};
class CMuteQuack : public CQuackBehavior
{
public:
void Quack() override
{
}
};
//鸭子对象
//绿头鸭
class CMallarDuck : public CDuck
{
public:
CMallarDuck()
{
this->p_fly_behavior = new CFlyNoWay();
this->p_quack_behavior = new CQuack();
}
void Display() override
{
printf("I am MallarDuck.\n");
}
};
//橡皮鸭
class CRubberDuck : public CDuck
{
public:
CRubberDuck()
{
this->p_fly_behavior = new CFlyNoWay();
this->p_quack_behavior = new CSQuack();
}
void Display() override
{
printf("I am RubberrDuck.\n");
}
};
int main()
{
CDuck *p_mallar_duck = new CMallarDuck();
CDuck *p_rubber_duck = new CRubberDuck();
p_mallar_duck->Display();
p_mallar_duck->Swim();
p_mallar_duck->PerformFly();
p_mallar_duck->PerformQuack();
p_rubber_duck->Display();
p_rubber_duck->Swim();
p_rubber_duck->PerformFly();
p_rubber_duck->PerformQuack();
p_rubber_duck->SetFlyBehavior(new CFlyWithWings);
p_rubber_duck->PerformFly();
system("pause");
return 0;
}
原文作者:Liber-coder
转载自:https://blog.csdn.net/a435262767/article/details/91047356
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)