哪位大神知道这是什么设计模式?还是只是一种设计技巧?

flying_music 2021-04-24 10:41:46
本人对设计模式一知半解,今天看到项目代码里有这用写法,目的就是让下层的B类,回头访问上层A类的成员,请问有没有人知道这是什么模式?

#include <iostream>

using namespace std;

class BListener {
public:
virtual ~BListener() {}
virtual void listener() = 0;
};

class B {
public:
BListener *m_listener;

B(BListener *listener = NULL) {
m_listener = listener;
}
void foo() { //需要访问A中的成员变量
if(m_listener) {
m_listener->listener();
}
}
};

class A : public BListener {
public:
void onNotify() {
//访问A的成员变量
}
void listener() {
onNotify();
}
public:
B b;
};

int main() {
A a;

return 0;
}
...全文
2741 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
亭台六七座 2021-09-10
  • 打赏
  • 举报
回复

各位大佬,这里的BListener 传播的是类A的指针吗?

flying_music 2021-09-11
  • 举报
回复
@亭台六七座 对,A继承了BListener,然后在初始化B的时候,把A的指针(也就是this)传给B的构造函数,这么做跟直接在B里定义一个A的指针更容易扩展。B相当于一个公共模块,A可以用,C也可以用,只要继承BListener的类都可以用,只要实现自己的listener函数就可以了
源代码大师 2021-04-26
  • 打赏
  • 举报
回复
C和C++ 完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++ 算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html
flying_music 2021-04-25
  • 打赏
  • 举报
回复
看了下装饰者模式,应该不是 监听者模式有点儿像,也不完全是 但我感觉这个代码还是比较实用的 其实就是先有一个类A,已经存在好多年了,成员变量有好多,业务逻辑也比较复杂了,这个时候如果再有新的功能,需要在A中实现,如果继续往A里加成员变量及方法,会使得A越来越沉重,这个问题应该是很普遍的问题,尤其是老代码 所以就实现了一个B来完成这个功能,触发流还是在A中,也就是A持有B的对象,调用B的成员方法,而B也要改变A中的某些成员变量,也就是说A和B就是互通的,A中要调用B,B也要调用A,这个时候就可以用这种方式来做,A改动代码很少,主要新增代码在B中实现,而A和B也可以自由调用
真相重于对错 2021-04-25
  • 打赏
  • 举报
回复
监听者模式,实际上的例子就是按钮之类控件的事件模型。
maguangzhi 2021-04-25
  • 打赏
  • 举报
回复
应该是装饰者模式

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧