zoukankan      html  css  js  c++  java
  • 大话设计-代理模式

    记录大话设计学习过程。

    代理模式:代理者为其他对象提供代理,以控制对真实对象的访问。

    用户调用代理者,代理者通过真实的对象引用让对象去做事情。但是代理者可以附加一些功能,然后才让真实对象去做事情。

    代理模式运用案例:WebService生成代理访问服务,虚拟代理、安全代理(控制真实对象访问时的权限)、智能引用。

    using System;
    
    namespace ConsoleApp4
    {
        class Program
        {
            public static void Main(string[] args)
            {
                var girl = new SchoolGirl("邓紫棋");
                Proxy proxy = new Proxy(girl);
                proxy.GiveFlowers();
                proxy.GiveChocolate();
                proxy.GiveDolls();
            }
        }
    
        interface GiveGift
        {
            void GiveDolls();
            void GiveFlowers();
            void GiveChocolate();
        }
    
        class Pursuit : GiveGift
        {
            SchoolGirl girl;
            public Pursuit(SchoolGirl girl)
            {
                this.girl=girl;
            }
    
            public void GiveChocolate()
            {
                Console.WriteLine("送巧克力");
            }
    
            public void GiveDolls()
            {
                Console.WriteLine("送洋娃娃");
            }
    
            public void GiveFlowers()
            {
                Console.WriteLine("送花");
            }
        }
    
        class Proxy : GiveGift
        {
            Pursuit Pursuit;
            public Proxy(SchoolGirl girl)
            {
                Pursuit = new Pursuit(girl);
            }
    
            public void GiveChocolate()
            {
                this.Pursuit.GiveChocolate();
            }
    
            public void GiveDolls()
            {
                this.Pursuit.GiveDolls();
            }
    
            public void GiveFlowers()
            {
                this.Pursuit.GiveFlowers();
            }
        }
    
        internal class SchoolGirl
        {
            public string Name { get; set; }
            public SchoolGirl(string name)
            {
                this.Name = name;
            }
        }
    }
    View Code
    using System;
    
    namespace ConsoleApp4
    {
        class Program
        {
            public static void Main(string[] args)
            {
                Proxy proxy = new Proxy();
                proxy.Request();
            }
        }
    
        abstract class Subject
        {
            public abstract void Request();
        }
    
        class RealSubject : Subject
        {
            public override void Request()
            {
                Console.WriteLine("真实对象在请求");
            }
        }
    
        class Proxy : Subject
        {
            RealSubject realSubject;
    
            public Proxy()
            {
                this.realSubject = new RealSubject();
            }
    
            public override void Request()
            {
                // 写一堆附加功能代码.....
                realSubject.Request();
            }
        }
        
    }
  • 相关阅读:
    二维数组中的查找
    排序算法——冒泡、选择、插入
    排序算法——快速、归并
    最小的K个数
    重建二叉树
    反转链表
    LeetCode 278 第一个错误的版本
    LeetCode 929 独特的电子邮件地址
    LeetCode 38 报数
    模型参数初始化
  • 原文地址:https://www.cnblogs.com/bibi-feiniaoyuan/p/proxy.html
Copyright © 2011-2022 走看看