我有一個名爲ArtificialIntelligenceBase的類,您可以從中創建自己的人工智能配置,向構造函數發送一些變量,或者可以創建一個繼承自ArtificialIntelligenceBase的類,並在此新類的構造函數中調用函數super( )與配置的參數。我應該使用從可實例化類繼承的單例類還是另一種更好的模式?
我還創建了一些人工智能的例子,類,AIPassive,AIAgressive和AIDefensive。顯然,它們都是從ArtificialIntelligenceBase繼承而來的。
問題是基類中只有少數公共函數。基類中的變量是隻讀的,如果需要在創建另一個預定義AI時對其應用某些修改,則非公共函數將受到保護。您可以創建另一個AI,只需調用基類,在構造函數中發送一些參數,如下所示:new ArtificialIntelligenceBase(param1,param2,param3,param4);
我已經把這些類作爲一個單例,因爲類永遠不會改變,一旦設置,它們的變量永遠不會改變。
問題是:單身人士是否是最好的模式?因爲我不確定。
PD:你並不需要解釋的任何圖案,只是提到名字,我會尋找它是如何工作的
PPD:我在AS3發展。萬一它有助於
感謝
我雖然關於單身人士避免冗餘,因爲所有的變量將保持不變。 例如: 一旦我有了新的AIPassive()的實例,要創建其他地方,新的AIPassive()的另一個實例將結束具有完全相同類的2個實例,並且所有變量都是隻讀的,儘管它可能是有道理的。 – iamnewhere 2011-05-03 23:39:05
@iamnewhere我認爲您應該將框架級別的問題與應用程序級別的問題分開。單身人士的大多數缺點是框架級的(像單元測試的麻煩)。另一方面,在意外創建的實例上花費額外資源對於具體,設計良好並經過測試的應用程序來說是個問題。所以我的建議是將必要的工廠方法添加到AI庫併爲您的應用程序創建單例實例。這會有點脆弱,因爲你可以訪問工廠方法和單例實例,所以確保整個團隊的所有決策都是清晰的。 – CheatEx 2011-05-04 07:48:31