Unity3D - 設計模式 - 工廠模式


工廠模式:以食物生產為例

1. 一個生產食物的工廠(此項 需要建立兩個類:食物基類<Food>,工廠類<Factory>)

2. 可以生產不同的食物(此項 建立食物的具體子類,均繼承食物的基類)

3. 運行程序生成不同的食物(此項 建立程序運行的主類 繼承魚MonoBehaviour,創建工廠類變量、食物基類變量,然后再Start方法里給食物基類變量賦值<通過傳入參數的不同 將父類指向一個子類>)

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 測試工廠模式
/// </summary>

// 創建實物的基類
public class Food
{
    public virtual void ShowMe ()
    {
        Debug.Log ("這是實物基類");
    }
}
// 西紅柿類
public class TomatoFood:Food
{
    public override void ShowMe ()
    {
        // 掉父類方法
        base.ShowMe ();

        Debug.Log ("TomatoFood");
    }
}
// 雞蛋
public class EggFood:Food
{
    public override void ShowMe ()
    {
        base.ShowMe ();

        Debug.Log ("EggFood");
    }
}

public class Factory
{
    public Food MakeFood (string name)
    {
        if (name == "egg") {
            return new EggFood ();
        } else if (name == "tomato") {
            return new TomatoFood ();
        }
        return null;
    }
}

public class Main : MonoBehaviour
{
    Factory factory = new Factory ();
    Food food1;
    Food food2;

    public void Start ()
    {
        food1 = factory.MakeFood ("egg");
        food1.ShowMe ();

        food2 = factory.MakeFood ("tomato");
        food2.ShowMe ();
    }
}

 以Resources加載游戲物體為例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class SpriteFactory : MonoBehaviour
{
    public Object[] allSprit;
    private int allIndex = 0;
    private Transform canvasTransform;

    /// <summary>
    /// 加載 Resources 文件夾下的資源
    /// </summary>
    void Start ()
    {
        canvasTransform = GameObject.Find ("Canvas").transform;
        LoadSprite ("Number");
    }


    void Update ()
    {
        if (Input.GetKeyDown (KeyCode.A)) {
            allIndex++;
            GameObject tempObj = GetImage (allIndex);
            tempObj.transform.parent = canvasTransform;
            tempObj.transform.position = new Vector3 (allIndex * 50, 0, 0);
        }
    }

    /// <summary>
    /// 加載Resources文件夾下指定名稱的資源
    /// </summary>
    /// <param name="name">指定名稱</param>
    public void LoadSprite (string name)
    {
        allSprit = Resources.LoadAll (name);
    }

    /// <summary>
    /// 加載指定索引的資源,並把該資源顯示出來
    /// </summary>
    /// <returns>返回一個新生成的物體,該物體顯式剛剛加載的資源</returns>
    /// <param name="index">給出要加載資源的一個索引</param>
    public GameObject GetImage (int index)
    {
        GameObject tempObj = new GameObject ("tempObj");
        Image tempImage = tempObj.AddComponent<Image> ();
        tempImage.sprite = allSprit [index] as Sprite;
        return tempObj;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM