2011-05-03 54 views
0

我有一個名爲ArtificialIntelligenceBase的類,您可以從中創建自己的人工智能配置,向構造函數發送一些變量,或者可以創建一個繼承自ArtificialIntelligenceBase的類,並在此新類的構造函數中調用函數super( )與配置的參數。我應該使用從可實例化類繼承的單例類還是另一種更好的模式?

我還創建了一些人工智能的例子,類,AIPassive,AIAgressive和AIDefensive。顯然,它們都是從ArtificialIntelligenceBase繼承而來的。

問題是基類中只有少數公共函數。基類中的變量是隻讀的,如果需要在創建另一個預定義AI時對其應用某些修改,則非公共函數將受到保護。您可以創建另一個AI,只需調用基類,在構造函數中發送一些參數,如下所示:new ArtificialIntelligenceBase(param1,param2,param3,param4);

我已經把這些類作爲一個單例,因爲類永遠不會改變,一旦設置,它們的變量永遠不會改變。

問題是:單身人士是否是最好的模式?因爲我不確定。

PD:你並不需要解釋的任何圖案,只是提到名字,我會尋找它是如何工作的

PPD:我在AS3發展。萬一它有助於

感謝

回答

2

一般來說,singletons are evil。在你的情況下,我也沒有看到任何理由使用單例。這聽起來像你使用自己版本的factory method模式(使用某種構造函數?)或者prototype(我不知道AS3有一點),但是如果你正在尋找其他模式,是abstract factorybuilder

儘管如此,您並不需要使用單例模式來限制自己只使用一種類型的實例。這無助於避免冗餘。

+0

我雖然關於單身人士避免冗餘,因爲所有的變量將保持不變。 例如: 一旦我有了新的AIPassive()的實例,要創建其他地方,新的AIPassive()的另一個實例將結束具有完全相同類的2個實例,並且所有變量都是隻讀的,儘管它可能是有道理的。 – iamnewhere 2011-05-03 23:39:05

+0

@iamnewhere我認爲您應該將框架級別的問題與應用程序級別的問題分開。單身人士的大多數缺點是框架級的(像單元測試的麻煩)。另一方面,在意外創建的實例上花費額外資源對於具體,設計良好並經過測試的應用程序來說是個問題。所以我的建議是將必要的工廠方法添加到AI庫併爲您的應用程序創建單例實例。這會有點脆弱,因爲你可以訪問工廠方法和單例實例,所以確保整個團隊的所有決策都是清晰的。 – CheatEx 2011-05-04 07:48:31

相關問題