一、代理模式的介绍

      代理模式我们脑袋里出现第一个词语就是代购,其实就是这样通过一个中间层这个中间成是属于什么都干什么都买得,俗称“百晓生”,在平时得开发中我们经常会听到什么远程代理,虚拟代理等等这一些都是代理模式得具体例子,来个官方定义就是给某一个对象提供一个代理,并由代理对象控制对原对象的引用;下面我们用代购的例子来说明一下这个情况;你想买一台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

最新文章

  1. 【Java并发编程实战】-----&ldquo;J.U.C&rdquo;:Exchanger
  2. JavaScript 函数表达式
  3. Linux命令行上程序执行的那一刹那!
  4. Android代码故事第一回,平均间隔的按钮
  5. Maven学习(三)生命周期
  6. Ubuntu和Windows的交互工具---Samba环境配置
  7. msyql数据库位置
  8. 原生的AJAX写法,可以直接复制过来套用
  9. centos6.4 yum kvm
  10. mysql 压缩版配置
  11. 吐血Eclipse Maven Selenium TestNG的各种坑
  12. mysql触发器详解 mysql触发器
  13. [Manthan, Codefest 18][Codeforces 1037F. Maximum Reduction]
  14. css中添加屏幕自适应方法(rem)
  15. oauth2-server-php-docs 概念
  16. Android 7.0 介绍和适配问题
  17. C语言界面显示水波纹效果
  18. BZOJ 1066:[SCOI2007]蜥蜴(最大流)
  19. java定时调度器解决方案分类及特性介绍
  20. 【bzoj2763】[JLOI2011]飞行路线 分层图最短路

热门文章

  1. C# 在腾讯的发展
  2. (JS+CSS)实现图片放大效果
  3. 利用CSS中的:after、: before制作的边三角提示框
  4. 前端学HTTP之重定向和负载均衡
  5. JavaScript常见的五种数组去重的方式
  6. CSS 3学习——box-sizing和背景
  7. SAP CRM 将组件整合至导航栏中
  8. 听H3絮叨:何以让天下没有难用的流程
  9. 流程表单中js如何清空SheetUser控件数据?
  10. Missing Push Notification Entitlement 问题