返回

责任链模式

责任链模式简介

古代女子有“三从四德”之说,“三从”即指“未嫁从父、既嫁从夫、夫死从子”。也就是说,一位女性在结婚之前要听从于父亲,结婚之后要听从于丈夫,如果丈夫死了还要听从于儿子。责任链模式即类似于三从,当一个请求传入后,根据父级、子级、孙级依次传递实现相对应功能,在传递过程中只听从对应功能模块操作。

简单代码例子

  • 一个资源导入传递过程。
public class IABResources
{
    //内存中的AssetBundle
    public AssetBundle abAssetBundle;

    public UnityEngine.Object LoadRes(string res)
    {
        // load 单个   Test 
        return abAssetBundle.LoadAsset(res);
    }
    public UnityEngine.Object[] LoadReses(string res)
    {
        //like:Number 本身和子类给load进来
        return abAssetBundle.LoadAssetWithSubAssets(res);
    }
}
//帮我们 load assetbundle 从硬盘
public class AssetBundleLoad
{
    Dictionary<string, IABResources> assetBundleManager = new Dictionary<string, IABResources>();

    public string assetBundleName;
    public void SettingCurBundleName(string name)
    {
        assetBundleName = name;
    }

    public IEnumerator LoadAssetBundle(string path)
    {
        UnityEngine.WWW tmpLoader = new WWW(path);
        while (!tmpLoader.isDone)
        {
            yield return tmpLoader;
        }
        assetBundleManager.Add(assetBundleName, tmpLoader.assetBundle);
    }

    public UnityEngine.Object LoadSingle(string bundleName, string res)
    {
        if (assetBundleManager.ContainsKey(bundleName))
        {
            IABResources tmpAB = assetBundleManager[bundleName];
            return tmpAB.LoadRes(res);
        }
        return null;
    }
}
public class TeachBuild : MonoBehaviour
{

    void Start()
    {
        AssetBundleLoad loader = new AssetBundleLoad();

        loader.SettingCurBundleName("test.u3d");

        StartCoroutine(loader.LoadAssetBundle("//path/to/test.u3d"));
    }
}
Licensed under CC BY-NC-SA 4.0
0