2009-09-13 200 views
-1

我正在尋找一些模式或在C++中實現的設計思路,這將允許以下內容。哪種設計模式?

1.

  • 類似物體
  • 對象提出請求並得到客戶放棄池
  • 池的增長筋疲力盡的時候,不縮水
  • 會有多個客戶端(每個客戶一個池避免無效)

對象池似乎最合適的。

2.

從池中得到的物體將是將被動態地鏈接在一起的數據處理器。每個對象執行一些操作,在傳遞數據之前可能會或可能不會更改數據(或者它們可能會終止鏈)。

這個要求讓我有點卡住了。我正在考慮一些修改後的責任鏈,其中數據將傳遞給所有人。

但是,我只是從空氣中採摘模式,並假設其最好的方法,所以我會很感激一些反饋,替代想法和借鑑他人的經驗警惕!

謝謝,

斯圖爾特。

感謝您的反饋到目前爲止:

中的對象進行實時數據的解碼/分析/轉換。該池將包含從相同基類派生的各種對象。

控制平面將根據外部標準動態創建並初始化對象鏈和對象。

數據格式可以在通過對象時顯式指示/更新。然而,這是孤立的,沒有什麼後果,因爲它在連鎖創作中已知。

該戰略模式值得一些研究。

回答

0

「相似」對象池?池的性質是,當你從池中請求一件物品時,你不知道你得到了哪一件。如此相似還不夠,他們需要保持一致。

但他們被鏈接?所以他們是不同的?因此,當你以某種方式「配置」它時,你得到一個對象。並且可以撤消該配置,以便可以將該對象返回到池中?

所以我的第一個問題是:爲什麼不「新」的對象時,你希望他們並在完成後刪除它們(或讓他們GC-ED)?

你不說是什麼驅使你走向池的想法。創建這些對象的成本是非常高的嗎?模式需要上下文,你沒有給出足夠的信息讓我們評論池的適當性。

一個想法:Pattern == Code,Code == bug。較少的代碼==較少的錯誤。如果可以的話,保持簡單。

責任理念的連鎖聽起來有道理,但是你又沒有給予足夠的inforamtion。 「鏈」的順序是否重要?它是如何確定的?它隨時間變化嗎?它真的是一個鏈條,還是更像一個「網」?所有對象是否都轉換數據?做一個轉換的含義是什麼,這可能會影響鏈中的先前項目如何考慮對象?

這聽起來像你得記住一些很靈活的處理。你是否構建過度的靈活性?什麼要求導致這個「鏈」概念?

+0

儘管池很像工廠,但創建一個抽象池可以生成具有相同接口但內部完全不同的對象應該是有效的。 每秒會有數百個對象構造/破壞。 該應用程序是音頻/視頻處理,具有不同的編解碼器,幀率/大小,輸入/輸出並行。 所以鏈的順序很重要,鏈中的元素只有在運行時才知道。 轉換可以相當劇烈地改變數據。 – hplbsh 2009-09-17 19:46:12

0

您需要提供更多關於如何使用這些對象的細節。做互動嗎?

您還需要一位經理來管理對象的生命週期(創建,分配)。管理器通常以singleton的形式實現...還可以考慮使用builder模式創建對象。

+0

既然作爲國家,每個客戶端都需要一個單獨的游泳池,單身感覺不合適的 - 每個客戶肯定一個池管理器,而不是一個單一的全球性的(需要互斥其中OP明確表示,他希望避免的),最好在這裏。 – 2009-09-13 16:47:30

0

你似乎確定了關鍵模式,除了我不確定「池中的對象」是如何不同的(如果他們這樣做的話) - 即每個對象如何知道執行的可能不同在將(可能修改的)數據交給鏈中的下一個對象(或打破鏈)之前進行處理?如果對象在一個池中,那麼我猜他們最好是沒有區別的和不可區分的 - 所以,你是否也需要一個模式,以使這些相同的對象執行不同的處理和邏輯...?