zoukankan      html  css  js  c++  java
  • DOTA版设计模式——简单工厂

    发表了两篇文章,没有发到首页上,没想到访问量这么低,汗啊..........
    不过既然要写还是写完吧,看来Dota的队伍不够大呃。当作我自己总结了
    这篇是简单工厂,实际上简单工厂不是Gof的23个设计模式一员,但是还是有必要说说滴,先来个UML图吧:
     
    设计模式的目标是解耦,把变化的部分各类来,本次Dota的例子是选择游戏类型的命令(-ap,-ar,-rd等等)。
    首先我们有命令对象,如下所示:
     
    Code
    RDGameType,APGameType都继承与抽象类GameType,实际是我们这里就是面向“接口”编程,下面我们来实现命令工厂:
    Code
    我们在需要创建命令的时候就可以这样写:
                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这个工厂去完成,实现了解耦。
     
     
    敬告

    作者:pangxiaoliang
    出处:http://www.cnblogs.com/pangxiaoliang
    本文版权归pangxiaoliang和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,谢谢合作。
  • 相关阅读:
    [CareerCup] 8.1 Implement Blackjack 实现21点纸牌
    [LeetCode] H-Index 求H指数
    [CareerCup] 7.7 The Number with Only Prime Factors 只有质数因子的数字
    [CareerCup] 7.6 The Line Passes the Most Number of Points 经过最多点的直线
    Ionic实战一:Ionic仿照微信项目
    ionic3+angular4+cordova 项目实例
    Android 给EditText添加下划线
    浅谈移动优先的跨终端Web 解决方案
    Android环信即时通讯集成坑爹 注册报错208解决
    Android自定义控件 -- 带边框的TextView
  • 原文地址:https://www.cnblogs.com/pangxiaoliang/p/1458363.html
Copyright © 2011-2022 走看看