• 为别人做嫁衣 代理模式


    7.1 为别人做嫁衣!

    7.2 没有代理的代码

    namespace 代理模式
    {
        class Program
        {
            static void Main(string[] args)
            {
                SchoolGirl jiaojiao = new SchoolGirl();
                jiaojiao.Name = "李娇娇";
    
                Pursuit zhuojiayi = new Pursuit(jiaojiao);
                zhuojiayi.GiveDolls();
                zhuojiayi.GiveFlowers();
                zhuojiayi.GiveChocolate();
    
                Console.Read();
            }
        }
    
        //追求者
        class Pursuit
        {
            SchoolGirl mm;
    
            public Pursuit(SchoolGirl mm)
            {
                this.mm = mm;
            }
    
            public void GiveDolls()
            {
                Console.WriteLine(mm.Name + " 送你洋娃娃");
            }
    
            public void GiveFlowers()
            {
                Console.WriteLine(mm.Name + " 送你鲜花");
            }
    
            public void GiveChocolate()
            {
                Console.WriteLine(mm.Name + " 送你巧克力");
            }
        }
    
        //被追求者
        class SchoolGirl
        {
            private string name;
    
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
        }
    
    }
    View Code

    7.3 只有代理的代码

    namespace 代理模式
    {
        class Program
        {
            static void Main(string[] args)
            {
                SchoolGirl jiaojiao = new SchoolGirl();
                jiaojiao.Name = "李娇娇";
    
                Proxy daili = new Proxy(jiaojiao);
                daili.GiveDolls();
                daili.GiveFlowers();
                daili.GiveChocolate();
    
                Console.Read();
            }
        }
    
        //代理人
        class Proxy
        {
            SchoolGirl mm;
    
            public Proxy(SchoolGirl mm)
            {
                this.mm = mm;
            }
    
            public void GiveDolls()
            {
                Console.WriteLine(mm.Name + " 送你洋娃娃");
            }
    
            public void GiveFlowers()
            {
                Console.WriteLine(mm.Name + " 送你鲜花");
            }
    
            public void GiveChocolate()
            {
                Console.WriteLine(mm.Name + " 送你巧克力");
            }
        }
    
        //被追求者
        class SchoolGirl
        {
            private string name;
    
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
        }
    
    }
    View Code

    7.4 符合实际的代码

    namespace 代理模式
    {
        class Program
        {
            static void Main(string[] args)
            {
                SchoolGirl jiaojiao = new SchoolGirl();
                jiaojiao.Name = "李娇娇";
    
                Proxy daili = new Proxy(jiaojiao);
                daili.GiveDolls();
                daili.GiveFlowers();
                daili.GiveChocolate();
    
                Console.Read();
            }
        }
    
        //送礼物
        interface GiveGift
        {
            void GiveDolls();
            void GiveFlowers();
            void GiveChocolate();
        }
    
        class Proxy : GiveGift
        {
            Pursuit gg;
    
            public Proxy(SchoolGirl mm)
            {
                gg = new Pursuit(mm);
            }
    
            public void GiveDolls()
            {
                gg.GiveDolls();
            }
    
            public void GiveFlowers()
            {
                gg.GiveFlowers();
            }
    
            public void GiveChocolate()
            {
                gg.GiveChocolate();
            }
        }
    
        class Pursuit : GiveGift
        {
            SchoolGirl mm;
    
            public Pursuit(SchoolGirl mm)
            {
                this.mm = mm;
            }
    
            public void GiveDolls()
            {
                Console.WriteLine(mm.Name + " 送你洋娃娃");
            }
    
            public void GiveFlowers()
            {
                Console.WriteLine(mm.Name + " 送你鲜花");
            }
    
            public void GiveChocolate()
            {
                Console.WriteLine(mm.Name + " 送你巧克力");
            }
        }
    
        class SchoolGirl
        {
            private string name;
    
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
        }
    
    }
    View Code

    7.5 代理模式

    为其它对象提供一种代理以控制对这个对象的访问,

    namespace 代理模式
    {
        class Program
        {
            static void Main(string[] args)
            {
                Proxy proxy = new Proxy();
                proxy.Request();
    
                Console.Read();
            }
        }
    
        //定义RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy,
        abstract class Subject
        {
            public abstract void Request();
        }
    
        //定义Proxy所代表的真实实体,
        class RealSubject : Subject
        {
            public override void Request()
            {
                Console.WriteLine("真实的请求");
            }
        }
        //保存一个引用使得代理可以访问实体,并提供一个与Subject的接口相同的接口,这样代理就可以用来替代实体,
        class Proxy : Subject
        {
            RealSubject realSubject;
    
            public override void Request()
            {
                if (realSubject == null)
                    realSubject = new RealSubject();
                realSubject.Request();
            }
        }
    
    }
    View Code

    7.6 代理模式的应用

    代理模式应用场合:

    1.远程代理,也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实,

    2.虚拟代理,是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象,

    3.安全代理,用来控制真实对象访问时的权限,

    4.智能指引,是指当调用真实的对象时,代理处理另外一些事,

    7.7 秀才让小六代其求婚

  • 相关阅读:
    在asyncio 中跳出正在执行的task
    运行代码框代码
    GridView单击行
    J2ME 使用HTTP网络连接实现排行榜
    Oxite的配置
    如何使用vs2005自带的sql2005
    点击右键出现导航菜单效果
    J2ME播放声音CODE
    将行为层和结构层分离 Html文档
    图片横向无缝滚动
  • 原文地址:https://www.cnblogs.com/huangxuQaQ/p/11265697.html
Copyright © 2020-2023  润新知