DOTA版设计模式——建造者

建造者模式哦,提供了一系列的方法对产品进行处理,可以选择其中的方法进行任意组合,不过要写好建造者模式代码需要有很强的业务知识哦。最后得到相应的产品就可以了。
UML图:
DOTA版设计模式——建造者
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);
            }
        }
    }
}

你可能感兴趣的:(设计模式)