zoukankan      html  css  js  c++  java
  • DesignPattern.Ch7.Prexy.Note

    代理模式(Prexy)为其他对象提供一种代理以控制这个对象的访问[DP]。

    代理模式代码代码比较简单,但是应用场景难于理解。

    代理模式菜鸟设计应用:

    Proxy.Newbie.Code
     1 namespace Pattern.Proxy.Newbie
     2 {
     3     interface IGiveGift
     4     {
     5         void GiveDolls();
     6         void GiveFlowers();
     7         void GiveChocolate();
     8     }
     9 
    10     class Proxy : IGiveGift
    11     {
    12         Pursuit GG { get; set; }
    13 
    14         public Proxy(SchoolGirl girl)
    15         {
    16             GG = new Pursuit(girl);
    17         }
    18         public void GiveDolls()
    19         {
    20             GG.GiveDolls();
    21         }
    22 
    23         public void GiveFlowers()
    24         {
    25             GG.GiveFlowers();
    26         }
    27 
    28         public void GiveChocolate()
    29         {
    30             GG.GiveChocolate();
    31         }
    32     }
    33 
    34     class Pursuit : IGiveGift
    35     {
    36         SchoolGirl Girl { get; set; }
    37 
    38         public Pursuit(SchoolGirl girl)
    39         {
    40             this.Girl = girl;
    41         }
    42         public void GiveDolls()
    43         {
    44             Console.WriteLine("{0} 送你的洋娃娃。", this.Girl.Name);
    45         }
    46 
    47         public void GiveFlowers()
    48         {
    49             Console.WriteLine("{0} 送你的玫瑰花。", this.Girl.Name);
    50         }
    51 
    52         public void GiveChocolate()
    53         {
    54             Console.WriteLine("{0} 送你的巧克力。", this.Girl.Name);
    55         }
    56     }
    57     class SchoolGirl
    58     {
    59         public string Name { get; set; }
    60         public SchoolGirl(string name)
    61         {
    62             this.Name = name;
    63         }
    64     }
    65 }

    代理模式原型设计应用:

    Proxy.Prototype.Code
     1 namespace Pattern.Proxy.Prototype
     2 {
     3     abstract class Subject
     4     {
     5         public abstract void Request();
     6     }
     7 
     8     class RealSubject : Subject
     9     {
    10         public override void Request()
    11         {
    12             Console.WriteLine("真实的请求。");
    13         }
    14     }
    15     class Proxy : Subject
    16     {
    17         Subject real { get; set; }
    18         public override void Request()
    19         {
    20             if (real == null)
    21                 real = new RealSubject();
    22             real.Request();
    23         }
    24 
    25     }
    26 }

    调用代理:

    Proxy.Main.Code
    namespace Pattern.Proxy
    {
        class Program
        {
            static void Main(string[] args)
            {
                SchoolGirl mm = new SchoolGirl("jiaojiao");
                Pattern.Proxy.Newbie.Proxy prexy = new Pattern.Proxy.Newbie.Proxy(mm);
                prexy.GiveChocolate();
                prexy.GiveDolls();
                prexy.GiveFlowers();
    
                Pattern.Proxy.Prototype.Proxy proxy = new Prototype.Proxy();
                proxy.Request();
            }
        }
    }

    代理模式的应用

    一般来说分为几种,第一种,远程代理,也就是为一个对象在不同的地址空间提供局部代理。这样可以隐藏一个对象存在于不同地址空间的事实[DP]。

    添加WebService时,在目录中声称一个WebReference文件夹和文件,它们就是代理,这就是客户端程序调用代理解决远程访问的问题。

    第二种应用是虚拟代理,是根据需要创建开销很大的对象。通过它来创建实例化需要很长时间的对象[DP],这样可以达到性能的优化,比如打开一个html页面文字可以很快显示出来,但是大图片需要一张一张的下载。

    第三种应用是安全代理,用来控制真是对象的访问权限[DP]。一般用于对象有同通的访问权限的时候。

    第四种智能指引,是指当调用真是的对象时,代理处理另外一些事情[DP]。

    代理模式其实就是在访问对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途。

  • 相关阅读:
    【剑指offer】面试题16、反转链表
    【剑指offer】面试题15、链表中倒数第 K 个结点
    【剑指offer】面试题14、调整数组顺序使奇数位于偶数前面
    oracle sql与调优
    linux 常用命令记录 持续更新
    函数重载中形参的const
    mem_fun_ref和mem_fun的用法
    c++风格的格式化输出
    count_if函数里面的第三个参数的书写方式<<0926
    操作符重载(++,+,输入输出,强制类型转换)
  • 原文地址:https://www.cnblogs.com/lovey/p/2982789.html
Copyright © 2011-2022 走看看