本人對設計模式一知半解,今天看到專案代碼里有這用寫法,目的就是讓下層的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;
}
uj5u.com熱心網友回復:
應該是裝飾者模式uj5u.com熱心網友回復:
監聽者模式,實際上的例子就是按鈕之類控制元件的事件模型。uj5u.com熱心網友回復:
看了下裝飾者模式,應該不是監聽者模式有點兒像,也不完全是
但我感覺這個代碼還是比較實用的
其實就是先有一個類A,已經存在好多年了,成員變數有好多,業務邏輯也比較復雜了,這個時候如果再有新的功能,需要在A中實作,如果繼續往A里加成員變數及方法,會使得A越來越沉重,這個問題應該是很普遍的問題,尤其是老代碼
所以就實作了一個B來完成這個功能,觸發流還是在A中,也就是A持有B的物件,呼叫B的成員方法,而B也要改變A中的某些成員變數,也就是說A和B就是互通的,A中要呼叫B,B也要呼叫A,這個時候就可以用這種方式來做,A改動代碼很少,主要新增代碼在B中實作,而A和B也可以自由呼叫
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/280020.html
標籤:模式及實現
上一篇:想找幾個小伙伴一起學習C++
下一篇:PC軟體自動升級問題
