unity优化游戏编程研究院Unity3d 开发技术

[Unity]使用C#中的委托类型实现代理设计模式

2015-09-16  本文已影响1997人  肖浩呗

[Unity]技术学习路线图(长期更新)

很多同学都会问到我说,代理设计模式到底会怎么用,哪些地方会用到,把自己对代理设计模式的一些感悟写下来,仅供参考。


什么是代理设计模式

指定一个对象做为另外一个对象的代理

举例如下:

那么在B对象完成排序功能的代码中,就可以通过指定代理对象A来进行数字的比较来进行判断,是否需要交换

代理设计模式需要用到的语法


委托类型变量的声明


接口类型的声明


使用代理模式完成上述排序的DEMO

AObject.cs完成比较的功能

//定义一个可以进行比较的委托类型
public delegate int CompareDelegate(int s1,int s2);

//定义接口类型
public interface CompareInterface
{
    //只定义属性的GET方法
    CompareDelegate Compare{get;}
}

//定义AObject类
public class AObject:SortInterface
{
    public CompareDelegate Compare{
        get{
            //返回下边定义的私有函数
            return p_cmp;
        }
    }
    
    //定义私有函数,用来保护程序逻辑代码封闭性
    private int p_cmp(int p1,int p2)
    {
        return p1 - p2;
    }
}


BObject.cs

public class BObject
{
    //指定代理对象
    public SortInterface Delegate{set;get;}
    
    //BObject函数内的排序函数
    public void Sort()
    {
        int[] list = new List[]{3,1,5,6,9};
        
        for(int i = 0;i < list.Count;i++)
        {
            for(int j = i + 1;j < list.Count;j++)
            {
                if(this.Delegate.Compare(list[i],list[j]) > 0)
                {
                    int temp = list[i];
                    list[i] = list[j];
                    list[j] = temp;
                }
            }
        }
    }
}

最终实现代理设计模式思想


哪些情况下会使用到代理设计模式呢


**在真实项目开发的过程中,经常会用到各种个样的设计模式思想,代理设计模式就是一种能够优化程序代码设计的设计思想**

September 16, 2015

上一篇 下一篇

猜你喜欢

热点阅读