跟简单工厂模式不一样的是, 父类会先声明几个子类即将用到的抽象方法, 和简单工厂模式的区别差不多就是这里了,
但是实际上还有什么不同的, 我需要做更多的实践才能明白, 先贴上一个比较贴近现实需求的实例
using UnityEngine;
using System.Collections;
/// <summary>
/// 定义资源枚举类型
/// </summary>
public enum ResourceEnum
{
None,
UIResource,
AudioResouce,
}
/// <summary>
/// 资源管理器基类,抽象产品
/// </summary>
public abstract class ResouceManager
{
public abstract void LoadConfig(string path);
public abstract void LoadAsset(string name);
public abstract void UnLoadResource(bool status);
}
/// <summary>
/// UI资源管理器,抽象产品的具体产品
/// </summary>
public class UIResouceManager : ResouceManager
{
public override void LoadConfig(string path)
{
Debug.Log("加载UI的配置文件");
}
public override void LoadAsset(string name)
{
Debug.Log("加载UI里面的资源");
}
public override void UnLoadResource(bool status)
{
Debug.Log("卸载加载的UI资源");
}
}
/// <summary>
/// Audio资源管理器,抽象产品的具体产品
/// </summary>
public class AudioResourceManager : ResouceManager
{
public override void LoadConfig(string path)
{
Debug.Log("加载和音乐有关的配置文件");
}
public override void LoadAsset(string name)
{
Debug.Log("加载音乐文件");
}
public override void UnLoadResource(bool status)
{
Debug.Log("卸载加载的音乐文件");
}
}
/// <summary>
/// 简单资源工厂类,负责创建UI,Audio等管理器的实例。
/// </summary>
public class ResouceSimpleFactory
{
public ResouceManager CreateManager(ResourceEnum re)
{
switch (re)
{
case ResourceEnum.UIResource:
return new UIResouceManager();
case ResourceEnum.AudioResouce:
return new AudioResourceManager();
default:
return null;
}
}
}
public class NewBehaviourScript1 : MonoBehaviour {
// Use this for initialization
void Start ()
{
ResouceSimpleFactory rsf = new ResouceSimpleFactory ();
ResouceManager rm = rsf.CreateManager (ResourceEnum.UIResource);
rm.LoadAsset("achivement");
}
}