设计模式之 - 抽象工厂模式(实例)

跟简单工厂模式不一样的是, 父类会先声明几个子类即将用到的抽象方法, 和简单工厂模式的区别差不多就是这里了,

但是实际上还有什么不同的, 我需要做更多的实践才能明白, 先贴上一个比较贴近现实需求的实例

 

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");

	}

}

 

 

posted on 2015-07-17 15:52  快要结束了  阅读(177)  评论(0编辑  收藏  举报

导航