23种设计模式--代理模式-Proxy

时间:2022-03-20 08:40:20

一、代理模式的介绍

      代理模式我们脑袋里出现第一个词语就是代购,其实就是这样通过一个中间层这个中间成是属于什么都干什么都买得,俗称“百晓生”,在平时得开发中我们经常会听到什么远程代理,虚拟代理等等这一些都是代理模式得具体例子,来个官方定义就是给某一个对象提供一个代理,并由代理对象控制对原对象的引用;下面我们用代购的例子来说明一下这个情况;你想买一台iphone,国行有点贵,然后拜托海外的朋友买一台给你带回来,就是这样的一个例子,首先我们先将买东西这个主题抽象出来,然后再把真实的自己买东西的类抽象出来,另外一个就是朋友这个抽象的代理类,他们用样继承买东西这个类,下面就是这个例子,具体大家看一下;

二、代理模式Demo

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

/// <summary>
    /// 真正得主题角色
    /// </summary>
    public class RealBuyPerson : Person
    {
        public override void BuyProduct()
        {
            Console.WriteLine("帮我买个Iphone");
        }
    }

/// <summary>
    /// 代理类
    /// </summary>
    public class Friend : Person
    {
        RealBuyPerson realBuy;
        public override void BuyProduct()
        {
            Console.WriteLine("通过代理类实现访真正得主题方法");
            if (realBuy == null)
            {
                realBuy = new RealBuyPerson();
            }
            this.PerBuyProduct();
            //调用真实类得方法
            realBuy.BuyProduct();
            this.PostBuyProduct();
        }
        /// <summary>
        /// 买完东西代理类得分类
        /// </summary>
        private void PostBuyProduct()
        {
            Console.WriteLine("终于买完了,现在要对东西分一下,相机是张三的;Iphone是李四的..........");
        }
        /// <summary>
        /// 代理类买东西得操作
        /// </summary>
        private void PerBuyProduct()
        {
            Console.WriteLine("我怕弄糊涂了,需要列一张清单,张三:要带相机,李四:要带Iphone...........");
        }
    }

static void Main(string[] args)
        {
            Person person = new Friend();

            person.BuyProduct();

            Console.ReadKey();
        }

三、GitHub

https://github.com/wangtongzhou520/Designpattern