0

0

C++ 函数的类方法如何用于设计模式?

王林

王林

发布时间:2024-10-02 19:24:01

|

391人浏览过

|

来源于php中文网

原创

c++++ 类方法的函数指针在设计模式中至关重要,可用于实现策略模式和观察者模式。在策略模式中,它允许动态更改算法,而观察者模式使用它注册和反注册观察者,为对象提供订阅和接收事件更新的能力。

C++ 函数的类方法如何用于设计模式?

C++ 类方法的函数指针如何用于设计模式:深入实战

在 C++ 中,类方法的函数指针在实现设计模式时起着至关重要的作用。函数指针是一种指向函数的变量,允许您动态地调用函数。对于几种常见的设计模式,例如策略模式和观察者模式,它们尤为有用。

实战案例:策略模式

立即学习C++免费学习笔记(深入)”;

策略模式是一种行为设计模式,它允许您动态地更改算法或策略。该模式将算法封装到独立的类中,然后您可以根据需要交换它们。

SuperCms在线订餐系统
SuperCms在线订餐系统

模板采用响应式设计,自动适应手机,电脑及平板显示;满足单一店铺外卖需求。功能:1.菜单分类管理2.菜品管理:菜品增加,删除,修改3.订单管理4.友情链接管理5.数据库备份6.文章模块:如:促销活动,帮助中心7.单页模块:如:企业信息,关于我们更强大的功能在开发中……安装方法:上传到网站根目录,运行http://www.***.com/install 自动

下载

在 C++ 中,可以使用类方法的函数指针来实现策略模式:

class Context {
public:
    void setStrategy(std::function strategy) {
        this->strategy = strategy;
    }

    int executeStrategy(int a, int b) {
        return this->strategy(a, b);
    }

private:
    std::function strategy;
};

class ConcreteStrategyA {
public:
    int operator()(int a, int b) {
        return a + b;
    }
};

class ConcreteStrategyB {
public:
    int operator()(int a, int b) {
        return a - b;
    }
};

int main() {
    Context context;

    ConcreteStrategyA strategyA;
    context.setStrategy(strategyA);
    std::cout << context.executeStrategy(10, 5) << std::endl; // 15

    ConcreteStrategyB strategyB;
    context.setStrategy(strategyB);
    std::cout << context.executeStrategy(10, 5) << std::endl; // 5

    return 0;
}

在这个示例中,Context 类充当策略模式的上下文,它持有对策略对象的引用。setStrategy() 方法允许您使用函数指针动态地设置策略。

实战案例:观察者模式

观察者模式是一种行为设计模式,它允许对象订阅事件并被通知事件的发生。该模式使用类方法的函数指针注册和反注册观察者。

class Subject {
public:
    void addObserver(std::function observer) {
        this->observers.push_back(observer);
    }

    void removeObserver(std::function observer) {
        auto it = std::find(this->observers.begin(), this->observers.end(), observer);
        if (it != this->observers.end()) {
            this->observers.erase(it);
        }
    }

    void notifyObservers(int eventData) {
        for (auto& observer : this->observers) {
            observer(eventData);
        }
    }

private:
    std::vector> observers;
};

class ConcreteObserverA {
public:
    ConcreteObserverA(int id) : id(id) {}

    void update(int eventData) {
        std::cout << "Observer " << id << " notified: " << eventData << std::endl;
    }

private:
    int id;
};

int main() {
    Subject subject;

    ConcreteObserverA observerA(1);
    subject.addObserver(observerA);

    ConcreteObserverA observerB(2);
    subject.addObserver(observerB);

    subject.notifyObservers(10); // "Observer 1 notified: 10"
                                 // "Observer 2 notified: 10"

    subject.removeObserver(observerA);
    subject.notifyObservers(20); // "Observer 2 notified: 20"

    return 0;
}

在这个示例中,Subject 类充当事件的来源。它持有观察者的函数指针列表。addObserver()removeObserver() 方法用于添加和删除观察者。当事件发生时,notifyObservers() 方法调用所有观察者的函数指针以通知他们事件的发生。

相关专题

更多
页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

395

2023.08.14

Golang 分布式缓存与高可用架构
Golang 分布式缓存与高可用架构

本专题系统讲解 Golang 在分布式缓存与高可用系统中的应用,涵盖缓存设计原理、Redis/Etcd集成、数据一致性与过期策略、分布式锁、缓存穿透/雪崩/击穿解决方案,以及高可用架构设计。通过实战案例,帮助开发者掌握 如何使用 Go 构建稳定、高性能的分布式缓存系统,提升大型系统的响应速度与可靠性。

58

2026.01.09

java学习网站推荐汇总
java学习网站推荐汇总

本专题整合了java学习网站相关内容,阅读专题下面的文章了解更多详细内容。

48

2026.01.08

java学习网站汇总
java学习网站汇总

本专题整合了java学习网站相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.01.08

正则表达式 删除
正则表达式 删除

本专题整合了正则表达式删除教程大全,阅读专题下面的文章了解更多详细教程。

51

2026.01.08

java 元空间 永久代
java 元空间 永久代

本专题整合了java中元空间和永久代的区别,阅读专题下面的文章了解更多详细内容。

4

2026.01.08

java 永久代和元空间
java 永久代和元空间

本专题整合了java中元空间和永久代的区别,阅读专题下面的文章了解更多详细内容。

0

2026.01.08

java成品网站源码资源大全
java成品网站源码资源大全

本专题整合了java成品网站源码相关内容,阅读专题下面的文章了解更多详细内容。

28

2026.01.08

java过滤器教程大全
java过滤器教程大全

本专题整合了java过滤器相关教程,阅读专题下面的文章了解更多详细内容。

7

2026.01.08

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 6.3万人学习

C 教程
C 教程

共75课时 | 3.9万人学习

C++教程
C++教程

共115课时 | 11.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号