Unity中的享元模式

1、建立角色基本屬性類。

namespace DesignMode
{
    public class CharacterBaseAttr
    {
        protected string mName;
        protected int mMaxHP;
        protected string mIconSprite;

        public string Name
        {
            get { return mName; }
        }

        public int MaxHP
        {
            get { return mMaxHP; }
        }

        public string IconSprite
        {
            get { return mIconSprite; }
        }

        public CharacterBaseAttr(string name, int maxHp, string iconSprite)
        {
            this.mName = name;
            mMaxHP = maxHp;
            this.mIconSprite = iconSprite;
        }
    }
}

2、建立角色抽象類。

namespace DesignMode
{
    public abstract class ICharacter
    {
        public CharacterBaseAttr mBaseAttr;

        public ICharacter()
        {
            BaseAttrFactory.Instance.characterBaseAttrDic.TryGetValue(this.GetType(), out mBaseAttr);
        }
    }
}

3、建立角色實體類。

namespace DesignMode
{
    public class SoldierCaptain:ICharacter
    {
    }
}
namespace DesignMode
{
    public class SoldierRookie:ICharacter
    {
    }
}
namespace DesignMode
{
    public class SoldierSergeant:ICharacter
    {
    }
}

4、建立屬性工廠類。

using System;
using System.Collections.Generic;

namespace DesignMode
{
    public class BaseAttrFactory
    {
        private static BaseAttrFactory mInstance=new BaseAttrFactory();

        private BaseAttrFactory()
        {
            Init();
        }
        
        public static BaseAttrFactory Instance
        {
            get { return mInstance; }
        }

        public Dictionary<Type, CharacterBaseAttr> characterBaseAttrDic;
        
        public void Init()
        {
            characterBaseAttrDic=new Dictionary<Type, CharacterBaseAttr>();
            characterBaseAttrDic.Add(typeof(SoldierCaptain),new CharacterBaseAttr("上尉士兵", 100,  "CaptainIcon"));
            characterBaseAttrDic.Add(typeof(SoldierSergeant),new CharacterBaseAttr("中尉士兵", 80,  "SergeantIcon"));
            characterBaseAttrDic.Add(typeof(SoldierRookie),new CharacterBaseAttr("新手士兵", 60,  "RookieIcon"));
        }
    }
}

PS:享元模式是把對象的共同屬性提煉出來,共同引用即可。優點是可以節省內存資源。缺點是代碼複雜。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章