0

ファクトリパターンの使用と実装に関する私の理解を確認したいと思います。いくつかのゲーム (チェス、ポーカー) をプレイするアプリケーションを設計しているとします。ゲームは、CSV、XML のいずれかのソースからロードされますが、アプリケーションを再コンパイル/再展開せずに新しいソース (DB など) を追加する機能が必要です。ファクトリ ロジックと新しいローダーを展開したいだけです。

これは、ゲーム ローダーのファクトリ パターンを示唆しています。次のようなものですが、具体的なローダーがリストを返すため、循環依存が発生します。

Application.prj has reference to AbstractFactory.prj
-----------------------

    main ()
    List<Game> games = LoadGameFactory.Create(src).Load(src)
    foreach(game in games) game.play();

abstract class Game { .. abstract void Play(); ..}
class Chess : Game  { .. void   Play() ..}
class Poker : Game  { .. void   Play() ..}

Factory.prj has reference to Application.prj
------------------------
class LoadGameFactory { 
    GameLoader Create(string src)
    {
        if(src == csv) return new LoadCSVGames().Load(src)
        else           return new LoadXMLGames().Load(src)      
    }
}
class GameLoader{ List<Game> Load(src) }

class CSVLoader : GameLoader
{
    List<Game> Load(src){ ... logic to create Chess() and Poker() from CSV file}
}

class XMLLoader : GameLoader
{
    List<Game> Load(src)    { ... logic to create Chess() and Poker() from XML file}
}

私が見つけた解決策は、ゲーム、チェス、ポーカーを移動する新しいプロジェクト Application.Model を作成することです。ecc そうすれば、Application.prj と Factory.prj は Application.Model だけを参照する必要があります。また、DB ソースを追加するには、factory.prj の再コンパイルとデプロイのみが必要です。

これは行く方法ですか?または、ファクトリ パターンを実装して同じ結果を得る方法はありますか。反省したくない。

4

1 に答える 1

0

プラグインベースのデザインが必要なようです。これはC#だと思います。やりたいことは、ゲーム、ゲーム ローダーなどを定義するインターフェイスの厳密なセットを設計することです。次に、Assembly.LoadFrom()すべての DLL をロードし、リフレクションを使用して、これらのインターフェイスやアセンブリから継承するエクスポートされたクラスを取得します。新しいオブジェクトをインスタンス化します。

于 2012-07-22T20:07:46.917 に答える