责任链模式简介
古代女子有“三从四德”之说,“三从”即指“未嫁从父、既嫁从夫、夫死从子”。也就是说,一位女性在结婚之前要听从于父亲,结婚之后要听从于丈夫,如果丈夫死了还要听从于儿子。责任链模式即类似于三从,当一个请求传入后,根据父级、子级、孙级依次传递实现相对应功能,在传递过程中只听从对应功能模块操作。
简单代码例子
- 一个资源导入传递过程。
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"));
}
}