设计模式你怎么看?--代理模式

一 前言

  最近持续在地地铁上看设计模式,突然之间就想通了,所有的模式最终都是想将代码解耦,提高重用,封装变化,总结起来就是"面向对象" 而在代码中要面向对象就离不开 抽象类 接口 继承。这么一想之后 发现所有的设计模式不管怎么变也只是抽象类 接口 继承。当我想通这点后再去看各种设计模式时 我就只需要关注于除了以上三点的变化之处了,理解也更简单了,下面开始学习一个新的模式 ——代理模式

 

设计模式你怎么看?--简单工厂模式

设计模式你怎么看?--抽象工厂模式

设计模式你怎么看?--工厂方法模式

设计模式你怎么看?--策略模式

 

二 代理模式简介

  2.1 什么是代理模式

为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

在实际生活中的表现就是各种中介,比如租房 你通过中介这个代理来找房东租房,这就像是代理模式

  2.2  代理模式包含角色 

  Subject:定义 了RealSubject和Proxy的共用接口,使得任何 使用RealSubject的地方都可以使用Proxy

      RealSubject:定义Proxy所代表的真实实体。

      Proxy:保存一个引用 使得代理可以访问实体并提供一个与Subject的接口相同的接口,使得代理 以用来替代实体

 

    2.3 代理模式UML图

    

 

三 代理模式代码

定义公共方法抽象类

    /// <summary>
    /// 定义 Proxy与RealRequest类的公共方法 
    /// </summary>
    public abstract class Request
    {
        public abstract void SendMessage();
    }

 

 

代理类 继承并实现Request基类中方法 
复制代码
    /// <summary>
    /// 代理类 
    /// </summary>
    class Proxy : Request
    {
        private RealRequest realRequest;

        public override void SendMessage()
        {
            if (realRequest == null)
                realRequest = new RealRequest();

            realRequest.SendMessage();
        }
    }
复制代码

 

 RealRequest类 真正执行客户所请求的方法 

复制代码
    /// <summary>
    /// 实际执处理请类
    /// </summary>
    class RealRequest:Request
    {
        public override void SendMessage()
        {
            Console.WriteLine("通过代理发送成功!");
        }
    }
复制代码

 

 客户端类 发起请求

复制代码
    /// <summary>
    /// 客户端类 将请求发给代理类(Proxy)
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            Proxy proxy = new Proxy();
            proxy.SendMessage();

            Console.Read();
        }
    }
复制代码

 

 执行结果如下 

 

 

四  总结

  路得一步一步走,代码得一行一行敲。

 

本人水平有限,如有不对之处还请指出 谢谢~

 

如果您觉得本文有给您带来一点收获,不妨点个推荐,为我的付出支持一下,谢谢~

如果希望在技术的道路上能有更多的朋友,那就关注下我吧,让我们一起在技术的路上奔跑

 

 

posted @   Zery  阅读(1345)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示