zoukankan      html  css  js  c++  java
  • DOTA版设计模式——建造者

    建造者模式哦,提供了一系列的方法对产品进行处理,可以选择其中的方法进行任意组合,不过要写好建造者模式代码需要有很强的业务知识哦。最后得到相应的产品就可以了。
    UML图:

    UML图可以看到Builder中包含产品的建造和获取,Director向导来决定如何建造产品。
    对于Dota中Model的建造来说需要实现以下接口IBuilder,包括创建模型,增加名称,设置技能,贴图。这里没有列举全有兴趣的同学可以自行补充完整。
        internal interface IBuilder
        {
            
    void CreateModel();
            
    void AddName();
            
    void SetSkill();
            
    void Maps();
        }

    主角是我们的Builder,在构造函数中实例化Model对象,其中包含了IBuilder中的全部建造过程。Model类见完整代码。
    public class ModelBuilder : IBuilder
        {
            
    private Model _model;

            
    public ModelBuilder()
            {
                _model 
    = new Model();
            }

            
    public Model GetModel()
            {
                
    return _model;
            }

            
    #region IBuilder 成员

            
    public void CreateModel()
            {
                _model.AddProperty(
    "CreateModel""CreateModel");
            }

            
    public void AddName()
            {
                _model.AddProperty(
    "AddName""AddName");
            }

            
    public void SetSkill()
            {
                _model.AddProperty(
    "SetSkill""SetSkill");
            }

            
    public void Maps()
            {
                _model.AddProperty(
    "Maps""Maps");
            }

            
    #endregion
        }

    测试代码:
                DotaPatternLibrary.Builder.ModelBuilder mbObj = new DotaPatternLibrary.Builder.ModelBuilder();
                mbObj.CreateModel();
                mbObj.AddName();
                mbObjNew.Maps();
                DotaPatternLibrary.Builder.Model model = mbObj.GetModel();
                model.Show();
                DotaPatternLibrary.Builder.ModelBuilder mbObjNew = new DotaPatternLibrary.Builder.ModelBuilder();
                mbObjNew.CreateModel();
                mbObjNew.AddName();
                mbObjNew.SetSkill();
                mbObjNew.Maps();
                model = mbObjNew.GetModel();
                model.Show();
    测试代码中一个是数的,一个是英雄的,两个建造过程差了SetKill方法,因为树是不需要技能的。
    完整代码:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Collections;

    using DotaCommon;

    namespace DotaPatternLibrary.Builder
    {
        
    internal interface IBuilder
        {
            
    void CreateModel();
            
    void AddName();
            
    void SetSkill();
            
    void Maps();
        }

        
    public class ModelBuilder : IBuilder
        {
            
    private Model _model;

            
    public ModelBuilder()
            {
                _model 
    = new Model();
            }

            
    public Model GetModel()
            {
                
    return _model;
            }

            
    #region IBuilder 成员

            
    public void CreateModel()
            {
                _model.AddProperty(
    "CreateModel""CreateModel");
            }

            
    public void AddName()
            {
                _model.AddProperty(
    "AddName""AddName");
            }

            
    public void SetSkill()
            {
                _model.AddProperty(
    "SetSkill""SetSkill");
            }

            
    public void Maps()
            {
                _model.AddProperty(
    "Maps""Maps");
            }

            
    #endregion
        }

        
    public class Model
        {
            Hashtable htObj 
    = new Hashtable();
            
    internal void AddProperty(string key, string value)
            {
                htObj.Add(key, value);
            }
            
    public void Show()
            {
                
    foreach (string value in htObj.Values)
                {
                    LandpyForm.Form.OutputResult(value);
                }
            }
        }
    }
    敬告

    作者:pangxiaoliang
    出处:http://www.cnblogs.com/pangxiaoliang
    本文版权归pangxiaoliang和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,谢谢合作。
  • 相关阅读:
    线程 详解
    登录时,添加图片验证码
    String、StringBuffer、StringBuilder详解
    Random 生成随机数
    down
    九九归一
    小R与手机
    coins
    noip注意事项
    小W计树
  • 原文地址:https://www.cnblogs.com/pangxiaoliang/p/1531138.html
Copyright © 2011-2022 走看看