开发设计模式(四) 代理模式(Proxy Pattern)

转自http://blog.sina.com.cn/s/blog_89d90b7c0101803g.html

代理模式:代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 
   代理模式的思想是为了提供额外的处理或者不同的操作而在实际对象与调用者之间插入一个代理对象。这些额外的操作通常需要与实际对象进行通信。
    应用场景:例如:假设有一组对象都实现同一个接口,实现同样的方法,但这组对象中有一部分对象需要有单独的方法,传统的笨办法是在每一个应用端都加上这个单独的方法,但是代码重用性低,耦合性高。如果用代理的方法则很好的解决了这个问题,
    其实从字面解释会更加容易,很容易就想到代理商:货物的所有权属于厂家,而代理商只是帮助厂家进行一些销售行为等,当然也可以有自己的行为,比如下面的例子中,商家就可以单独的去给商品做销售活动,而跟厂家没有直接关系。

using UnityEngine;
using System.Collections;

// 定义一个商品行为接口 //
interface Goods
{
    // 定价 //
    void Pricing();
    // 销售 //
    void Sale();
}
// 然后定义厂家 //
class AFactory : Goods
{
    public void Pricing()
    {
        Debug.Log("厂家给商品定价啦..................");
    }
    public void Sale()
    {
        Debug.Log("我去,厂家直销啊,这得多便宜啊...................");
    }
}
// 再来定义商家,嗯 就是代理商 //
class Shops : Goods
{
    // 定义一个商品接口 //
    private Goods goods;
    // 构造方法,传人带有商品行为接口的类 //
    public Shops(Goods goods)
    {
        this.goods = goods;
    }

    public void Pricing()
    {
        Debug.Log("商家使用厂家的定价,当然商家也可以在一定范围内调价,比如下面的方法可以留出参数..................");
        this.goods.Pricing();
    }
    public void Sale()
    {
        Debug.Log("商家开始销售啦,俺帮厂家销售,自己还得钱,真爽....................");
        this.goods.Sale();
    }
}
// 欧也,下面代理商就可以开始工作了 //
public class Proxy : MonoBehaviour
{
    void Start()
    {
        Shops shops = new Shops(new AFactory());
        shops.Pricing();
        shops.Sale();
    }
}

总结一下,代理模式主要是用了面对对象的多态性。对于某种共同的行为,代理类是接活,幕后主使人是被代理类,完成人家分配的任务就会有好的报酬,可以知道,他们是同穿一条裤子,你能做啥我能做啥都清楚的很,因为有同一个行为接口。O(∩_∩)O

原文地址:https://www.cnblogs.com/martianzone/p/3364756.html