页首HTML代码

Y先生的小屋

导航

结构型模式之代理模式

概述

在软件开发中,有一种设计模式可以提供与代购网站类似的功能。由于某些原因,客户端不想或不能直接访问一个对象,此时可以通过一个称之为“代理”的第三者来实现间接访问,该方案对应的设计模式被称为代理模式。

代理模式是一种应用很广泛的结构型设计模式,而且变化形式非常多,常见的代理形式包括远程代理、保护代理、虚拟代理、缓冲代理、智能引用代理等。

定义

代理模式:给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。

实现

    /// <summary>
    /// 供应商
    /// </summary>
    public interface Supplier
    {
        /// <summary>
        /// 买奶粉
        /// </summary>
        void BuyMilkPowder();
    }
    /// <summary>
    /// 店员
    /// </summary>
    public class Salesclerk : Supplier
    {
        /// <summary>
        /// 买奶粉方法
        /// </summary>
        public void BuyMilkPowder()
        {
            Console.WriteLine("通过店员买了一袋奶粉。");
        }
    }
    public class Proxy : Supplier
    {
        Salesclerk salesclerk = new Salesclerk();
        public void BuyMilkPowder()
        {
            Console.WriteLine("通过中间商买了一袋奶粉。");
            salesclerk.BuyMilkPowder();
        }
    }

客户端

    class Program
    {
        static void Main(string[] args)
        {
            Supplier proxy = new Proxy();
            proxy.BuyMilkPowder();
            Console.ReadLine();
        }
    }

总结

1、代理模式能够将调用用于真正被调用的对象隔离,在一定程度上降低了系统的耦合度;

2、代理对象在客户端和目标对象之间起到一个中介的作用,这样可以起到对目标对象的保护。代理对象可以在对目标对象发出请求之前进行一个额外的操作,例如权限检查等。

缺点:

1、 由于在客户端和真实主题之间增加了一个代理对象,所以会造成请求的处理速度变慢

2、实现代理类也需要额外的工作,从而增加了系统的实现复杂度。

posted on 2016-06-10 00:29  Y.Mr  阅读(134)  评论(0编辑  收藏  举报

页脚HTML代码