我想检查一下我对使用和实现工厂模式的理解。假设我正在设计一个应用程序来玩几个游戏(国际象棋、扑克)。游戏是从以下来源之一加载的: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,在其中移动 Game、Chess 和 Poker,ecc 这样,Application.prj 和 Factory.prj 将只需要引用 Application.Model。并且添加数据库源只需要 factory.prj 重新编译和部署。
这是要走的路吗?或者有没有办法实现工厂模式以获得相同的结果。我不想反思。