C#设计模式详解:代理模式实现与分类解析

栗子
栗子
发布时间:2026-10-14 | 2人浏览过
原创

代理模式是结构型设计模式中的重要成员,主要解决在无法直接访问某个对象或访问存在困难时,通过一个代理对象来间接访问的问题。为保证客户端使用的透明性,真实对象与代理对象需实现相同的接口。本文通过C#代码示例详解其实现方式,并分类介绍远程代理、虚拟代理、安全代理及智能指引等典型应用场景。

代理模式的核心原理

代理模式的核心在于创建一个代理对象,该对象包含对真实对象的引用,并实现与真实对象相同的接口。当客户端调用代理对象的方法时,代理对象可以将请求转发给真实对象,从而实现对真实对象的控制或增强。

以下是使用 C# 实现的代理模式基本结构示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DesignModel
{
    // 定义操作接口
    public interface IAction
    {
        void SendFlower();
        void SendCake();
    }

    // 真实主题类
    public class ZQZ : IAction
    {
        public string myname { set; get; }

        public void SendFlower()
        {
            Console.WriteLine(myname + "送花");
        }

        public void SendCake()
        {
            Console.WriteLine(myname + "送蛋糕");
        }
    }

    // 代理类
    public class Proxy : IAction
    {
        private ZQZ zzz = null;

        public Proxy(ZQZ mm)
        {
            zzz = mm;
        }

        public void SendFlower()
        {
            // 可以在这里添加前置逻辑,如权限检查
            if (zzz != null)
                zzz.SendFlower();
        }

        public void SendCake()
        {
            // 可以在这里添加后置逻辑,如日志记录
            if (zzz != null)
                zzz.SendCake();
        }
    }
}

在上述代码中,IAction 接口定义了公共行为,ZQZ 是实现了该接口的真实主题类,而 Proxy 类则作为代理类,持有 ZQZ 的实例并实现了 IAction 接口。客户端可以通过代理对象发起请求,从而实现了对真实对象的间接访问。

客户端调用示例

在实际使用中,客户端并不关心自己操作的是真实对象还是代理对象,这正是代理模式“透明性”的体现。以下是一个简单的调用示例:

ZQZ zzz = new ZQZ();
zzz.myname = "朱建军";
Proxy p = new Proxy(zzz);
p.SendFlower();
p.SendCake();

通过上述调用,程序将输出:
朱建军送花
朱建军送蛋糕

代理模式的常见分类与应用场景

根据使用目的的不同,代理模式可以分为多种类型,每种类型都有其特定的应用场景。

第1步:远程代理(Remote Proxy)

目的:为一个位于不同地址空间的对象提供一个本地代表,以隐藏对象存在于不同地址空间的事实。

应用:例如在 WebService 服务调用中,客户端通过远程代理对象与方法进行交互,而无需关心具体的网络通信细节。远程代理负责处理网络序列化、反序列化以及数据传输。

第2步:虚拟代理(Virtual Proxy)

目的:根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真正对象。

应用:最典型的例子是浏览器中图片的懒加载。在页面滚动到可视区域之前,浏览器只放置一个占位符(虚拟代理),当用户视线到达时,再加载真实的图片资源。这优化了初始页面的加载速度。

第3步:安全代理(Protection Proxy)

目的:用来控制对真实对象访问时的权限。

应用:在系统内部,某些敏感操作可能需要管理员权限。通过安全代理,可以在调用真实对象方法前进行身份验证和权限检查,确保只有具备相应权限的用户才能执行特定操作。

第4步:智能指引(Smart Reference)

目的:指调用真实对象时,代理处理另外一些事情,如记录访问次数、缓存结果等。

应用:例如,当一个对象被频繁访问时,可以创建一个智能代理来缓存其结果,避免重复计算或重复访问昂贵资源。此外,还可以用于跟踪对象的引用计数,以便在不再需要时自动释放资源。

总结

代理模式作为一种经典的结构型设计模式,不仅解决了对象访问受限的问题,还通过不同的代理类型实现了权限控制、性能优化、延迟加载等功能。在 C# 开发中,合理利用代理模式可以使代码结构更加清晰,解耦客户端与真实对象之间的依赖关系。

以上就是C#代理模式实现与应用场景的详细内容,更多关于C#设计模式优化的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表