本文章属于专栏- 概述 - 《设计模式(极简c++版)》-CSDN博客
本章简要说明适配器模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。
模式说明
- 方案:策略模式是一种行为设计模式,它定义了一系列算法,将每个算法封装起来,并使它们可以相互替换,使得算法可以独立于使用它的客户端而变化。
- 优点:
- 灵活性:客户端可以根据需要选择不同的算法。
- 可维护性:算法的变化不会影响到客户端的实现,易于扩展和维护。
- 缺点:
- 客户端必须了解所有的策略类:客户端需要知道所有可用的策略类,可能增加了耦合度
本质思想:策略模式通过将算法封装成独立的策略类,使得这些算法可以相互替换,客户端可以根据需求选择不同的策略。
实践建议:如果算法模块是一个团队开发的,让算法团队提供统一接口,以减少服务端和策略部分耦合。如果算法模块是多个团队开发,应该是服务端同学根据多个算法模块的语意,使用策略模式,让算法模块易于使用。
代码示例:
#include <iostream>
// 策略接口
class FlyBehavior {
public:
virtual void fly() = 0;
};
// 具体策略:飞行行为1
class FlyWithWings : public FlyBehavior {
public:
void fly() override {
std::cout << "I'm flying with wings!" << std::endl;
}
};
// 具体策略:飞行行为2
class FlyNoWay : public FlyBehavior {
public:
void fly() override {
std::cout << "I can't fly!" << std::endl;
}
};
// 策略模式的上下文,即使用策略的类
class Bird {
protected:
FlyBehavior *flyBehavior;
public:
void setFlyBehavior(FlyBehavior *fb) {
flyBehavior = fb;
}
virtual void performFly() {
flyBehavior->fly();
}
};
// 具体的鸟类
class Sparrow : public Bird {
public:
Sparrow() {
// 默认使用飞行行为1
flyBehavior = new FlyWithWings();
}
};
int main() {
Sparrow sparrow;
sparrow.performFly(); // 输出:I'm flying with wings!
FlyNoWay fnw;
sparrow.setFlyBehavior(&fnw);
sparrow.performFly(); // 输出:I can't fly!
return 0;
}