此为设计模式第二谈!
用总-分-总的结构和生活化的例子给你讲解设计模式!
码农不易,各位学者学到东西请点赞收藏支持支持!
开始部分:
总:策略模式的本质:分离算法选择实现。代表性应用有支付方式的选择,文件压缩等等。
分:
1.老规矩,在vs中创建一个控制台应用
2.实现编码,这里使用了旅行出行方式作为例子
2.1 策略模式有三大模块,Context上下文、Strategy策略接口、ConcreateStrategy具体策略实现
2.2 飞机、火车、汽车类的重写函数是具体策略的实现
2.3 旅行者则是上下文,选择什么策略由他来决定
2.4 策略接口则是交通工具这个大类
#include <iostream>
using namespace std;
// 定义抽象策略接口:交通工具
class TravelStrategy {
public:
virtual void travel() const = 0; // 纯虚函数,定义旅行方式
virtual ~TravelStrategy() {} // 虚析构函数,确保正确析构
};
// 具体策略:飞机
class Plane : public TravelStrategy {
public:
void travel() const override {
cout << "乘坐飞机,快速抵达目的地。" << endl;
}
};
// 具体策略:火车
class Train : public TravelStrategy {
public:
void travel() const override {
cout << "乘坐火车,欣赏沿途风景。" << endl;
}
};
// 具体策略:汽车
class Car : public TravelStrategy {
public:
void travel() const override {
cout << "驾驶汽车,自由行进。" << endl;
}
};
// 上下文:旅行者
class Traveler {
private:
TravelStrategy* strategy; // 旅行策略
public:
Traveler(TravelStrategy* strat) : strategy(strat) {}
~Traveler() {
// 不再释放策略
}
void setStrategy(TravelStrategy* strat) { // 设置新的旅行策略
// 不再释放旧策略
strategy = strat;
}
void makeTrip() const { // 进行旅行
cout << "开始旅行...\n";
strategy->travel();
cout << "旅行结束。\n";
}
};
int main() {
// 创建不同的策略(交通工具)
TravelStrategy* plane = new Plane();
TravelStrategy* train = new Train();
TravelStrategy* car = new Car();
// 创建旅行者并设置初始策略
Traveler traveler(plane);
traveler.makeTrip(); // 使用飞机策略去旅行
// 更改策略,使用火车去旅行
traveler.setStrategy(train);
traveler.makeTrip();
// 再次更改策略,使用汽车去旅行
traveler.setStrategy(car);
traveler.makeTrip();
// 释放策略对象
delete plane;
delete train;
delete car;
return 0;
}
3.这里有三大模块的结构图来辅助理解策略模式