C#---高级|设计模式---工厂模式

【千锋合集】史上最全Unity3D全套教程|匠心之作_哔哩哔哩_bilibili

《设计模式》一书

 UML类图------StarUML

 

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

public class LegencyFunction : MonoBehaviour {

    private void Start()
    {
        float? result=Count(10,21,"*");
        Debug.Log(result);
        //新模式
        BinaryOperation operation = OperationFactory.CreateOperation(1,2,"+");
        operation.SetNumber(2,3);
        float newresult=operation.GetResult();
        Debug.Log(newresult);
    }
    public float? Count(float num01,float num02,string sign) {
        switch (sign) {
            case "+":
                return num01 + num02;
            case "-":
                return num01 - num02;
            case "*":
                return num01 * num02;
            case "/":
                return num01 / num02;
            default:
                return null;
        } 
    }

    /// <summary>
    /// /工厂模式
    /// </summary>
    public abstract class BinaryOperation {
        protected float number01;
        protected float number02;

        public BinaryOperation() { }

        public void SetNumber(float number01,float number02) {
            this.number01 = number01;
            this.number02 = number02;
        }

        public BinaryOperation(float number01, float number02)
        {
            this.number01 = number01;
            this.number02 = number02;
        }
        public abstract float GetResult();
    }
    public class PlusOperation : BinaryOperation
    {
        public PlusOperation(float number01, float number02) : base(number01, number02)
        {
        }

        public override float GetResult()
        {
            return number01 + number02;
        }
    }

    public class SubtractionOperation : BinaryOperation
    {
        public SubtractionOperation(float number01, float number02) : base(number01, number02)
        {
        }

        public override float GetResult()
        {
            return number01 - number02;
        }
    }

    public class MultiplicationOperation : BinaryOperation
    {
        public MultiplicationOperation(float number01, float number02) : base(number01, number02)
        {
        }

        public override float GetResult()
        {
            return number01*number02;
        }
    }

    public class OperationFactory {
        public static BinaryOperation CreateOperation(float number01, float number02, string sign) {
            switch (sign)
            {
                case "+":
                    return new PlusOperation(number01,number02);
                case "-":
                    return new SubtractionOperation(number01, number02);
                case "*":
                    return new MultiplicationOperation(number01,number02);
                default:
                    return null;
            }
        }
    }
}

拆分、隔离

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

public class UnityAssetsFactory : MonoBehaviour {
    public static UnityAsset CreateUnityAsset(string assetType) {
        switch (assetType) {
            case "GameObject":
                return new PrefabAsset("");
            case "Sprite":                
                return new SpriteAsset("");
            default:
                return null;
        }
    }    
}

public abstract class UnityAsset {
    public string path;
    public UnityAsset(string path) {
        this.path=path;
    }
    protected object asset;
    public void Load() { asset = Resources.Load(path); }
    public abstract void Instantiate();
    public abstract void Show();
}

public class PrefabAsset : UnityAsset
{

    public PrefabAsset(string path) : base(path)
    {
    }

    public override void Instantiate()
    {
        GameObject go = GameObject.Instantiate(asset as GameObject);
    }

    public override void Show()
    {
        
    }
}

public class SpriteAsset : UnityAsset
{

    public SpriteAsset(string path) : base(path)
    {
    }

    public override void Instantiate()
    {
        GameObject go = new GameObject("Sprite");
        SpriteRenderer spriteRenderer=go.AddComponent<SpriteRenderer>();       
        Sprite sprite = Sprite.Create(asset as Texture2D,new Rect(0,0,100,100),Vector2.zero);
        sprite.name = "sprite";
        spriteRenderer.sprite = sprite;
    }

    public override void Show()
    {
       
    }
}
 

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

public class UnityFactoryConsole : MonoBehaviour {
    private void Start()
    {
        //第一步,工厂生产对象
        //UnityAsset unityAsset =UnityAssetsFactory.CreateUnityAsset("GameObject","Cube");
        UnityAsset unityAsset = UnityAssetsFactory.CreateUnityAsset("Sprite");
        unityAsset.path = "Pig";
        //第二步,对象加载资源
        unityAsset.Load();
        //第三步,生产该资源
        unityAsset.Instantiate();
    
    }

}
 

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

public class UnitySingletonFactory : MonoBehaviour {
    public static UnitySingletonFactory instance;

    private void Awake()
    {
        instance = this;
        DontDestroyOnLoad(gameObject);//单例永久存在
    }

    public T GetAsset<T>(string assetPath) where T:Object {
        return Resources.Load<T>(assetPath);
    }
    public T[] GetAssets<T>(string assetsPath) where T:Object {
        return Resources.LoadAll<T>(assetsPath);
    }

   
}
 

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

public class UnityFactoryConsole : MonoBehaviour {
    private void Start()
    {
        //第一步,工厂生产对象
        //UnityAsset unityAsset =UnityAssetsFactory.CreateUnityAsset("GameObject","Cube");
        UnityAsset unityAsset = UnityAssetsFactory.CreateUnityAsset("Sprite");
        unityAsset.path = "Pig";
        //第二步,对象加载资源
        unityAsset.Load();
        //第三步,生产该资源
        unityAsset.Instantiate();

        //单例工厂--->直接获取资源


        GameObject cubePrefab=UnitySingletonFactory.instance.GetAsset<GameObject>("Cube");
        Instantiate(cubePrefab);
    
    }

}
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值