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:享元模式是把对象的共同属性提炼出来,共同引用即可。优点是可以节省内存资源。缺点是代码复杂。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值