发表了两篇文章,没有发到首页上,没想到访问量这么低,汗啊..........
不过既然要写还是写完吧,看来Dota的队伍不够大呃。当作我自己总结了DOTA版设计模式——简单工厂
这篇是简单工厂,实际上简单工厂不是Gof的23个设计模式一员,但是还是有必要说说滴,先来个UML图吧:
 
设计模式的目标是解耦,把变化的部分各类来,本次Dota的例子是选择游戏类型的命令(-ap,-ar,-rd等等)。
首先我们有命令对象,如下所示:
 
    }
RDGameType,APGameType都继承与抽象类GameType,实际是我们这里就是面向“接口”编程,下面我们来实现命令工厂:
 GameTypeFactory
    {
        public static GameType GetGameType(string command)
        {
            GameType gameType 
= null;
            
if (command == "-rd")
            {
                gameType 
= new RDGameType();
            }
            
else if (command == "-ap")
            {
                gameType 
= new APGameType();
            }
            
return gameType;
        }
    }
我们在需要创建命令的时候就可以这样写:
            string command;
            LandpyForm.Form.OutputResult("输入-rd");
            command = "-rd";
            DotaPatternLibrary.SimpleFactory.GameType gameType = DotaPatternLibrary.SimpleFactory.GameTypeFactory.GetGameType(command);
            //GameType是抽象类,GameTypeFactory中的GetGameType方法根据传入的string型参数,创建出需要的GameType(RDGameType,APGameType),这样加入有新的命令类型现在的客户端代码不用修改,只更改GameTypeFactory类就可以了。
            LandpyForm.Form.OutputResult(gameType.TypeName);
 
            LandpyForm.Form.OutputResult("输入-ap");
            command = "-ap";
            gameType = DotaPatternLibrary.SimpleFactory.GameTypeFactory.GetGameType(command);
            LandpyForm.Form.OutputResult(gameType.TypeName);
得到的结果是:
输入-rd
RD Command
输入-ap
AP Command
可以看到当我们有新命令的时候调用的代码不用重写,只需要写一个继承GameType 的新命令类即可,命令的实例化交由GameTypeFactory这个工厂去完成,实现了解耦。
 
 

相关文章:

  • 2021-06-10
  • 2021-08-19
  • 2021-10-23
  • 2022-01-11
猜你喜欢
  • 2022-03-06
  • 2022-02-07
  • 2022-12-23
  • 2022-12-23
  • 2021-10-22
  • 2021-10-11
  • 2021-11-02
相关资源
相似解决方案