概述
- 委托模式(
Delegate Pattern
)是一种结构型设计模式,它允许一个对象(委托者)将某些特定的任务委托给其他对象(委托对象)来执行。 - 委托模式可以用于解耦合、分离关注点以及在运行时动态选择执行对象
- 委托模式的主要目的是将一组具体的任务从委托者对象中解耦出来,使得委托者对象不需要关心具体的任务执行方式,而只需要负责将任务委托给合适的委托对象。
- 这样可以增加代码的可维护性和灵活性,同时使代码更加清晰和易于扩展。
场景
- 解耦合:当委托者对象需要执行的任务涉及到多个不同的具体执行方式时,可以使用委托模式将任务与具体执行方式解耦,使委托者对象不需要了解具体执行细节
- 分离关注点:当一个类负责多个不相关的任务时,可以使用委托模式将不同的任务分离出去,使得每个任务有专门的委托对象处理,增加代码的可读性和可维护性
- 动态选择执行对象:在运行时可以动态地选择委托对象来执行任务,根据不同的需求选择不同的委托对象
- 扩展性:当需要增加新的任务时,可以通过添加新的委托对象来扩展功能,而不需要修改委托者对象的代码
实现一
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> #include <functional> // Delegate Object Interface class TaskDelegate { public: virtual void execute() = 0; }; // Concrete Delegate Object class ConcreteTaskDelegate : public TaskDelegate { public: void execute() override { std::cout << "Executing the task." << std::endl; } }; |
1 2 3 4 5 6 7 8 9 10 11 12 |
// Delegator Object class TaskDelegator { private: TaskDelegate* delegate; public: TaskDelegator(TaskDelegate* delegate) : delegate(delegate) {} void doTask() { delegate->execute(); } }; |
1 2 3 4 5 6 7 8 9 10 |
int main() { // 创建具体的委托对象 TaskDelegate* delegate = new ConcreteTaskDelegate(); // 创建委托者对象,并将任务委托给委托对象执行 TaskDelegator delegator(delegate); delegator.doTask(); return 0; } |
实现二
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
class Task { public: class delegate { public: virtual void do_task() = 0; } public: Task(delegate* delegate) : delegate_(delegate) { // ... } void task() { if (delegate_) { delegate_->do_task(); } } // ... private: delegate* delegate_; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
class Manager : public Task::delegate { public: // from Task::delegate void do_task() override { std::cout << "hello delegate" << std::endl; } void run_task() { Task * task = new Task(this); if (true) { task->task(); } } // ... private: // ... } |
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 结构型:装饰器模式09/19
- ♥ 结构型:桥接模式09/24
- ♥ 行为型:解释器模式09/25
- ♥ 行为型:状态模式09/24
- ♥ 行为型:命令模式09/19
- ♥ 行为型:模板方法模式09/25