工廠方法模式(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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章