• 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

  • 相关阅读:
    CSP -- 运营商内容劫持(广告)的终结者
    vue学习:解决Apycharm的 * is only available in ES6(use 'esversion: 6') 问题
    nvm、node、npm安装以及pycharm配置eslint
    python中的daemon守护进程实现方法
    python语言基础问题汇总
    python -- DNS处理模块dnspython
    Python ping 模块
    如何把Python脚本导出为exe程序
    从实际案例聊聊Java应用的GC优化
    Python类(六)-静态方法、类方法、属性方法
  • 原文地址:https://www.cnblogs.com/zyfadmin/p/8463747.html
Copyright © 2020-2023  润新知