c++++ lambda 表达式在设计模式中的作用:战略模式:简化策略对象的创建,无需独立类。命令模式:轻松创建命令对象,实现可重用且松散耦合的操作。观察者模式:简化观察者的创建,实现松散耦合的通信。
C++ Lambda 表达式在设计模式中的运用
简介
Lambda 表达式是一种匿名函数,它允许在无需显式定义函数名称的情况下定义代码块。在 C++ 中,lambda 表达式通常用于创建简单的匿名回调或函数传递给其他函数。在设计模式中,lambda 表达式可以巧妙地简化代码,提高可读性和灵活性。
立即学习“C++免费学习笔记(深入)”;
战略模式
战略模式允许我们通过将算法封装成对象来改变对象的执行行为。lambda 表达式可以简化策略对象的创建,无需使用独立的类:
class Context {
public:
void setStrategy(function<int(int, int)> strategy) {
this->strategy = strategy;
}
int executeStrategy(int a, int b) {
return this->strategy(a, b);
}
private:
function<int(int, int)> strategy;
};
int main() {
Context context;
context.setStrategy([](int a, int b) { return a + b; });
cout << context.executeStrategy(1, 2) << endl; // 输出:3
return 0;
}
命令模式
命令模式允许我们以可重用且松散耦合的方式表示和执行操作。lambda 表达式可以轻松创建命令对象,使代码更加简洁:
class Command {
public:
virtual void execute() = 0;
};
class ConcreteCommand1 : public Command {
public:
ConcreteCommand1() { this->action = []() { cout << "Command 1 executed" << endl; }; }
void execute() override { this->action(); }
private:
function<void()> action;
};
int main() {
vector<Command*> commands;
commands.push_back(new ConcreteCommand1());
commands.push_back(new ConcreteCommand1());
for (auto command : commands) {
command->execute();
}
return 0;
}
观察者模式
观察者模式允许对象通过订阅事件并进行相应的反应来松散耦合地通信。lambda 表达式可以简化观察者的创建:
class Subject {
public:
void addObserver(function<void()> observer) {
this->observers.push_back(observer);
}
void notifyObservers() {
for (auto observer : this->observers) {
observer();
}
}
private:
vector<function<void()>> observers;
};
int main() {
Subject subject;
subject.addObserver([]() { cout << "Observer 1 notified" << endl; });
subject.addObserver([]() { cout << "Observer 2 notified" << endl; });
subject.notifyObservers();
return 0;
}
结论
Lambda 表达式在 C++ 设计模式中是一个强大的工具,可显著提高代码的可读性、灵活性、可重用性和可维护性。通过创建简短、易于理解的代码块,我们可以实现复杂的设计模式而不会引入不必要的复杂性。