【设计模式】使用unity实现模板模式(Template mode)

阅读《大话设计模式》后,自己根据unity的特性写的一个简单demo,如有不妥之处,欢迎评论纠正....


首先贴上书中关于模板模式的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 模板方法
{
    public abstract class AbstractClass
    {
        public abstract void PrimitiveOperation1();
        public abstract void PrimitiveOperation2();

        public void TemplateMethod()
        {
            PrimitiveOperation1();
            PrimitiveOperation2();
            Console.WriteLine("父类模板");
        }
    }

    public class ConcreteClassA : AbstractClass
    {

        public override void PrimitiveOperation1()
        {
            Console.WriteLine("子类A方法1实现");
        }

        public override void PrimitiveOperation2()
        {
            Console.WriteLine("子类A方法2实现");
        }
    }

    public class ConcreteClassB : AbstractClass
    {

        public override void PrimitiveOperation1()
        {
            Console.WriteLine("子类b方法1实现");
        }

        public override void PrimitiveOperation2()
        {
            Console.WriteLine("子类B方法2实现");
        }
    }
}

客户端:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 模板方法
{
    class Program
    {
        static void Main(string[] args)
        {
            AbstractClass c;

            c = new ConcreteClassA();
            c.TemplateMethod();

            c = new ConcreteClassB();
            c.TemplateMethod();

            Console.ReadKey();
        }
    }
}



然后下面是我写的使用unity实现模板模式(template mode)的unity代码

Template.cs:

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

public class Template
{
    protected  Text mBtnText;
    protected Text mText;
    protected Image mImage;

    protected Action Callback;

    public Template() { }


    protected void Init(Transform transform)
    {
        mBtnText = transform.Find("Button/Text").GetComponent();
        mText = transform.Find("Text").GetComponent();
        mImage = transform.Find("Image").GetComponent();

        Button button = transform.Find("Button").GetComponent


ConcreteTemplateA和ConcreteTemplateB

using UnityEngine;
using System.Collections;

public class ConcreteTemplateA : Template
{
    protected override void Method1()
    {
        base.Method1();
        mText.text = "模板方法A";
        mBtnText.text = "模板方法A按钮";
        mImage.color = Color.green;
        Callback = OnClick;
    }

    private void OnClick()
    {
        Debug.Log("模板方法A的按钮事件");
    }
}

public class ConcreteTemplateB : Template
{
    protected override void Method1()
    {
        mText.text = "模板方法B";
        mBtnText.text = "模板方法B按钮";
        mImage.color = Color.yellow;
        Callback = null;
        Callback = OnClick;
    }

    private void OnClick()
    {
        Debug.Log("模板方法B的按钮事件");
    }
}


Test.cs

using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {

    void OnGUI()
    {
        if(GUI.Button(new Rect(100,100,120,50), "按钮A"))
        {
            Template a = new ConcreteTemplateA();
            a.TemplateMethod(this.transform);
        }

        if (GUI.Button(new Rect(100, 200, 120, 50), "按钮B"))
        {
            Template b = new ConcreteTemplateB();
            b.TemplateMethod(this.transform);
        }
    }

}


最后是运行的效果:

【设计模式】使用unity实现模板模式(Template mode)_第1张图片


【设计模式】使用unity实现模板模式(Template mode)_第2张图片


只要把Test.cs挂上到canvas就可以了


你可能感兴趣的:(Unity架构,设计模式)