2012-07-06 40 views
0

我正在編寫相當大且複雜的應用程序,所以我想堅持設計模式以保持代碼質量。我有一個需要幾乎所有其他實例可用的實例的問題。Python應用程序設計模式 - 實例必須適用於大多數其他實例

比方說,我有BusMonitor(用於記錄消息的類)的實例以及使用此實例記錄動作的其他實例,例如,解析來自網絡協議的傳入幀的Reactor,並根據幀記錄不同的消息。

我有一個創建BusMonitor,Reactor和更少的實例的主要實例。 現在我想讓Reactor能夠使用BusMonitor實例,我該如何根據設計模式來做到這一點?

設置它作爲反應器中的變量似乎醜對我來說: self._reactor.set_busmonitor(self._busmonitor)

我會做,對於每個需要訪問BusMonitor實例。導入這個實例似乎更糟。

雖然我可以使BusMonitor作爲Singleton,我的意思不是類,但作爲模塊,然後導入此模塊,但我想保留在類中的東西,以保持一致性。

什麼方法是最好的?

+0

將其設置爲變量有什麼問題?你爲什麼覺得這很醜? – 2012-07-06 11:43:20

+0

嗯我不確定這是否是好方法,不會在將來腐爛嗎?或者看看這個例子。我有gui接口的主要實例,它不需要訪問busmonitor,這個gui會生成標籤實例,標籤會創建一些更深層的小部件,然後我們會到達實例需要訪問busmonitor的點,現在我必須將busmonitor作爲變量從上到下傳遞給每個實例,以便能夠通過它。 – 2012-07-06 12:11:24

+0

嗯...小部件可能會要求父母給他的對象,父母會問其父母等等。 – 2012-07-06 12:39:31

回答

0

我發現我認爲很好的方式。我使用BusMonitor類創建了模塊,並且在同一個模塊中,在類定義之後,我創建了此類的實例。現在我可以從項目中的任何地方導入它,並使用類和封裝保持一致性。

3

我希望大家都能夠在課堂上保持一致性

爲什麼?爲什麼一致性很重要(除了是一個小腦袋的大地精)?

使用有意義的類。在沒有的地方使用模塊。 Python中的類實際上是用於封裝數據和保留狀態。如果你不做這些事情,不要使用課程。否則,你會反對這種語言。

+0

但我封裝數據。過濾器狀態,被記錄的消息以及其他一些事情。當然,我們可以說這不值得,我應該使用模塊。但是,這個問題在其他語言中如何解決? – 2012-07-06 13:07:01

1

正如你已經有了一個層次結構,你可以使用一個鏈來得到它..它不是Chain-of-responsibility pattern,但這個想法是相似的。

每個窗口小部件都有一個getbusmonitor調用,除了根窗口以外的所有窗口小部件都是return self.parent().getbusmonitor()。你也可以緩存結果..