zoukankan      html  css  js  c++  java
  • 代理(Proxy)模式

    代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的反问。

    * 抽象主题角色(Subject):声明了真实主题和代理主题的共同接口,这样一来在任何使用真实主题的地方都可以使用代理主题。
    * 代理主题(Proxy)角色:代理主题角色内部含有对真是主题的引用,从而可以在任何时候操作真实主题对象;
      代理主题角色提供一个与真实主题角色相同的接口,以便可以在任何时候都可以替代真实主体;
      控制真实主题的应用,负责在需要的时候创建真实主题对象(和删除真实主题对象);
      代理角色通常在将客户端调用传递给真实的主题之前或之后,都要执行某个操作,而不是单纯的将调用传递给真实主题对象。
    * 真实主题角色(RealSubject)角色:定义了代理角色所代表的真实对象。

     如下代码 通过代理类 Proxy  来实现,真实主题角色(RealSubject)中的 Request() 方法。

    没有直接 实例化 RealSubject 类 来实现。

          static void Main(string[] args)
            {
                // 创建代理和请求一个服务
                Proxy p = new Proxy();
                p.Request(); 
                Console.ReadLine();
            }
    
        /// <summary>
        /// 抽象主题角色(Subject)
        /// </summary>
        public abstract class Subject
        {
            // 函数
            public abstract void Request();
        }
        /// <summary>
        /// 真实主题角色(RealSubject)角色
        /// </summary>
        public  class RealSubject : Subject
        {
            // 方法
            public override void Request()
            {
                Console.WriteLine("Called RealSubject.Request()");
            }
        }
    
        /// <summary>
        /// 代理主题(Proxy)角色
        /// </summary>
        public class Proxy : Subject
        {
            // 变量字段
            RealSubject realSubject;
            // 从写方法
            public override void Request()
            {
                if (realSubject == null)
                    realSubject = new RealSubject();
                preRequest();
                realSubject.Request();
                postRequest();
            }
            public void preRequest()
            { Console.WriteLine("PreRequest."); }
            public void postRequest()
            { Console.WriteLine("PostRequest."); }
    
        }
  • 相关阅读:
    设计模式-17-迭代器
    设计模式-16-备忘录
    微服务架构设计
    数据库拆分案例
    生成多个git ssh密钥
    分布式数据中间件TDDL、Amoeba、Cobar、MyCAT架构比较
    maven工程 java 实现文件上传 SSM ajax异步请求上传
    MySQL的分区、分表、集群
    Redis实现分布式锁原理与实现分析
    关于消息队列的使用
  • 原文地址:https://www.cnblogs.com/dragon-L/p/3780181.html
Copyright © 2011-2022 走看看