享元模式实例
//抽象共享组件
public interface IFlyWeight {
    bool CheckMaxValue(int val);
}
//具体的共享组件
public class EnemyMaxFlyweight : IFlyWeight
{
    private int maxHp = 999999;

    public bool CheckMaxValue(int val)
    {
        if (val > maxHp) return false;

        return true;
    }
}
using System.Collections.Generic;

//工厂类
public class FlyweightFactory  {

    private static FlyweightFactory _instance;
    private Dictionary<string, IFlyWeight> dic = new Dictionary<string, IFlyWeight>();

    private FlyweightFactory()
    {
        dic.Add("MaxEnemyHp", new EnemyMaxFlyweight());
    }

    public static FlyweightFactory Instance {
        get {
            if (_instance == null) _instance = new FlyweightFactory();

            return _instance;
        }
    }

    public IFlyWeight GetFlyWeight(string key)
    {
        if (dic.ContainsKey(key))
            return dic[key];

        return null;
    }
}
//测试使用
using UnityEngine;

public class testFlyweight : MonoBehaviour {
    
	void Start () {
        int enemyHp = 1000000;
        bool isgo = FlyweightFactory.Instance.GetFlyWeight("MaxEnemyHp").CheckMaxValue(enemyHp);

        if (!isgo) {
            Debug.Log("生成的敌人生命值超过限制!");
        }
	}
}

这里举的例子是关于一类敌人的生成的,假如这类敌人要不停生成,生命不限定,有最大生命值的限定,超过就让他等于最大生命值等,这个最大生命值是固定不变且可以在多个敌人生成器中共享的,所以把这个最大生命值提取出来作为共享元素,当然游戏中,很多的属性都是共享的,只要就只占用一份内存了。


首页 我的博客
粤ICP备17103704号