C#设计模式--代理模式(学习Learning hard 设计模式笔记)

 class Program
    {
        static void Main(string[] args)
        {
            //创建一个代理对象 并发出请求
            Person proxy = new Friend();

            proxy.BuyProduct();

            Console.Read();
        }
    }

    //抽象主题角色
    public abstract class Person
    {
        public abstract void BuyProduct();

    }

    //真实主题角色
    public class RealBuyPerson : Person
    {
        public override void BuyProduct()
        {
            Console.WriteLine("帮我买个苹果手机和苹果电脑");
        }
    }



    //代理主题角色
    public class Friend : Person
    {
        //引用真实主题实例
        RealBuyPerson RealSubject;
        public override void BuyProduct()
        {
            Console.WriteLine("通过代理类访问真实实体对象的方法");
            if (RealSubject == null)
            {
                RealSubject = new RealBuyPerson();
            }


            //调用真实的主题方法
            RealSubject.BuyProduct();
            this.PreBuyProduct();
            this.PostProduct();

        }


        //代理角色执行一些操作
        public void PreBuyProduct()
        {
            //买东西,列个清单,买的东西比较多
            Console.WriteLine("我怕弄糊涂了,需要列一张清单,张三:手机,李四:要带电脑...........");
            Console.WriteLine("买手机...........");
            Console.WriteLine("买电脑...........");
            Console.WriteLine("...........");
        }

        //买完东西后 开始给朋友分发
        public void PostProduct()
        {
            Console.WriteLine("买完了。。开始分东西,张三 手机,李四 电脑…………");
        }
    }

优点:

  1. 代理模式能够将调用用于真正被调用的对象隔离,在一定程度上降低了系统的耦合度;
  2. 代理对象在客户端和目标对象之间起到一个中介的作用,这样可以起到对目标对象的保护。代理对象可以在对目标对象发出请求之前进行一个额外的操作,例如权限检查等。

缺点:

  1.  由于在客户端和真实主题之间增加了一个代理对象,所以会造成请求的处理速度变慢
  2. 实现代理类也需要额外的工作,从而增加了系统的实现复杂度。

原文地址http://www.cnblogs.com/zhili/p/ProxyPattern.html

posted on 2018-02-23 22:45  雪域凌晨  阅读(117)  评论(0编辑  收藏  举报

导航