既然是C++,我就用C++來寫
/* 你說的大class */
class BigClass {
private:
Data * data; //不希望公開曝露的資源,但是必須給State使用。
public:
State* getState() { // 透過BigClass建立State物件。
return new State(data);
}
};
/* 接受 BigClass 工作委託的State */
class State {
private:
Data * data;
public:
State(Data * data) { this->data = data; }
};
所有 State 都必須經由 BigClass 產生,
保證資源除了 BigClass 與 State 以外,
其他人都拿不到也看不到。
這只是非常粗略的作法,不過大體上精神如此
不知道這樣合乎你的要求否?
※ 引述《iamstudent (stu)》之銘言:
: 當一個大class內的工作內容會發生變化時
: 可以把不同的處理方法抽出去
: 然後利用虛擬函數的多型來達成目的
: 但是我在c++使用上有點困擾在
: 要使用的資源都在原本的大class中
: 而抽出去的這些state都要使用它們
: 只想到兩個方法
: a 在大的class中使用friend
: b 在大的class加上public method
: 可是這兩個方法感覺都不好
: 方法a要寫非常多的friend class
: 假設有幾個class: A, B and C1 C2 C3 ... Cn
: A去friend B,然後C系列class都繼承B
: C仍然無法access A的private data
: 結果是A要friend所有C系列的類別
: 方法b則是
: 剛好大的class可以抽出一些低階函數作為共用介面的時候才行的通
: 如果很難寫出一個介面出來的時候
: 一樣很頭痛
: 想請教一下版上先進
: 是否還有其他處理辦法?