Re: [請教] 請教strategy、state pattern in C++

看板OOAD作者 (mat)時間13年前 (2011/04/23 19:33), 編輯推噓3(302)
留言5則, 2人參與, 最新討論串3/7 (看更多)
既然是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可以抽出一些低階函數作為共用介面的時候才行的通 : 如果很難寫出一個介面出來的時候 : 一樣很頭痛 : 想請教一下版上先進 : 是否還有其他處理辦法? -- 無論如何矛盾的是,在小說的最後一頁,故事就不再有生命了。 我們的生活繼續下去,故事卻沒有。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.45.97.225 ※ 編輯: chchwy 來自: 114.45.97.225 (04/23 19:38) ※ 編輯: chchwy 來自: 114.45.97.225 (04/23 19:41)

04/23 19:47, , 1F
正解
04/23 19:47, 1F

04/23 19:52, , 2F
不過那個state應該不是一個class,而是一個繼承體系
04/23 19:52, 2F

04/23 19:53, , 3F
我想要的效果是state pattern
04/23 19:53, 3F

04/23 19:53, , 4F
目前這個例子比較接近memento pattern
04/23 19:53, 4F

04/24 01:06, , 5F
這和我講的不是一樣嗎 Orz
04/24 01:06, 5F
文章代碼(AID): #1DihaSW5 (OOAD)
討論串 (同標題文章)
文章代碼(AID): #1DihaSW5 (OOAD)