demo下载地址 : https://github.com/Eagle-Lai/DesignMode/tree/master/Proxy
阅读《大话设计模式》后,自己根据unity的特性写的一个简单demo,如有不妥之处,欢迎评论纠正....
先贴上书中的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 代理模式
{
public abstract class Subject
{
public abstract void Request();
}
public class RealSubject : Subject
{
public override void Request()
{
Console.WriteLine("真实的请求!!!");
}
}
class Proxy : Subject
{
private RealSubject realSubject;
public override void Request()
{
if(realSubject == null)
{
realSubject = new RealSubject();
}
realSubject.Request();
}
}
}
客户端代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 代理模式
{
class Program
{
static void Main(string[] args)
{
Proxy proxy = new Proxy();
proxy.Request();
Console.ReadKey();
}
}
}
UIView.cs
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System;
public class UIView {
private Text mText;
// private Button mButton;
private Text mBtnText;
private Image mImage;
private Action Callback;
public UIView() { }
public void Init(Transform transform, Action callback, Color imageColor, string txt = "", string btnTxt = "")
{
InitUI(transform);
SetText(txt);
SetBtnText(btnTxt);
SetImage(imageColor);
Callback = callback;
}
private void InitUI(Transform transform)
{
mText = transform.Find("Text").GetComponent<Text>();
Button mButton = transform.Find("Button").GetComponent<Button>();
mBtnText = transform.Find("Button/Text").GetComponent<Text>();
mImage = transform.Find("Image").GetComponent<Image>();
mButton.onClick.AddListener(onClick);
}
private void onClick()
{
if(Callback != null)
{
Callback();
}
}
private void SetText(string txt)
{
mText.text = txt;
}
private void SetBtnText(string txt)
{
mBtnText.text = txt;
}
private void SetImage(Color color)
{
mImage.color = color;
}
}
ProxyUIView.cs
using UnityEngine;
using System.Collections;
using System;
public class ProxyUIView
{
public static void Proxy(Transform transform, Color imageColor, Action callback, string txt = "", string btnTxt = "")
{
UIView v = new UIView();
v.Init(transform, callback, imageColor, txt, btnTxt);
}
}
Test.cs:
using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour {
void OnGUI()
{
if(GUI.Button(new Rect(100, 100, 120,50), "代理者"))
{
ProxyUIView.Proxy(this.transform, Color.green, Callback, "代理者", "代理者按钮");
}
}
private void Callback()
{
print("代理成功");
}
}
运行效果,点击button就会log出内容