您的位置:首页 > 其它

工厂方法模式(FactoryMethodPattern)

2015-11-25 16:06 169 查看
修炼工厂方法模式的心法如下:

1) 抽象工厂角色Creator:是工厂方法模式的核心,与应用程序无关。在此模式中创建的对象的工厂类必须实现这个接口。

2) 具体工厂角色ConcreteCreator:这是实现抽象工厂接口的具体工厂类,包含于应用程序密切相关的逻辑,并且由应用程序调用来创建产品对象。

3) 抽象产品角色Product:工厂方法模式所创建的对象的基类型或接口,也就是产品对象的共同父类或共同拥有的接口。

4)具体产品角色ConcreteProduct:这个角色实现了抽象产品角色所定义的接口。具体的产品有专门的具体工厂创建,他们之间往往一一对应。

using UnityEngine;
using System.Collections;
using System;

namespace FactoryMethod
{
// 抽象工厂
public abstract class CreatorResourceFactory
{
public abstract ResourceManage CreateFactroy();
}

/// <summary>
/// 具体工厂
/// </summary>
// UI管理
public class UIResourceManageFactory:CreatorResourceFactory
{
public override ResourceManage CreateFactroy()
{
return new UIResourceManage();
}
}
// 音效管理
public class AudioResourceManageFactory:CreatorResourceFactory
{
public override ResourceManage CreateFactroy()
{
return new AudioResourceManage();
}
}

/// <summary>
/// 抽象产品
/// </summary>
public abstract class ResourceManage
{
public abstract void LoadConfig(string path);
public abstract void LoadAsset(string name);
public abstract void UnLoadResource(bool state);
}
/// <summary>
/// 具体产品
/// </summary>
//   Client UIResourceManage
public class UIResourceManage :ResourceManage
{
public override void LoadConfig(string path)
{
Debug.Log("ui 路径:"+path);
}
public override void LoadAsset(string name)
{
Debug.Log("ui资源名字:" + name);
}
public override void UnLoadResource(bool state)
{
Debug.Log("ui 是否加载:" + state);
}
}
//    Client AudioResourceManage
public class AudioResourceManage : ResourceManage
{
public override void LoadConfig(string path)
{
Debug.Log("Audio路径:" + path);
}
public override void LoadAsset(string name)
{
Debug.Log("Audio资源名字:" + name);
}
public override void UnLoadResource(bool state)
{
Debug.Log("Audio是否加载:" + state);
}
}
}


客户端

using UnityEngine;
using System.Collections;

public class ResourceFactoryMethodClient : MonoBehaviour {

// Use this for initialization
// 定义具体产品工厂
FactoryMethod.CreatorResourceFactory uiResourceManager;
FactoryMethod.CreatorResourceFactory audioResourceManager;
// 定义具体产品
FactoryMethod.ResourceManage uiManager;
FactoryMethod.ResourceManage audioManager;

void Start () {
//从抽象工厂到具体工厂
uiResourceManager = new FactoryMethod.UIResourceManageFactory();
audioResourceManager = new FactoryMethod.AudioResourceManageFactory();
}

void OnGUI()
{
if (GUILayout.Button ("ui管理"))
{
uiManager = uiResourceManager.CreateFactroy();
uiManager.LoadAsset("Cc");
uiManager.LoadConfig("UI");
uiManager.UnLoadResource(false);
}
if (GUILayout.Button ("Auido管理"))
{
audioManager = audioResourceManager.CreateFactroy();
audioManager.LoadAsset("Jj");
audioManager.LoadConfig("Audio");
audioManager.UnLoadResource(false);
}
}
}


转载:http://www.manew.com/thread-37874-1-1.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: