设计模式之 - 抽象工厂模式(实例)
跟简单工厂模式不一样的是, 父类会先声明几个子类即将用到的抽象方法, 和简单工厂模式的区别差不多就是这里了,
但是实际上还有什么不同的, 我需要做更多的实践才能明白, 先贴上一个比较贴近现实需求的实例
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"); } }