工厂方法模式(FactoryMethodPattern)

修炼工厂方法模式的心法如下:
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值