设计模式(9)----- 代理模式

代理模式(Proxy Pattern)

概念:

在代理模式中,一个类代表另一个类的功能。我们创建具有现有对象的对象,以便向外界提供功能接口。

优点:

  1. 职责清晰。
  2. 高扩展性。
  3. 智能化。

缺点:

  1. 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
  2. 代理模式会造成系统设计中类的数量增加
  3. 增加了系统的复杂度;

代理模式的主要角色如下

抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。

真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。

代理(Proxy)类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。

实现类图
在这里插入图片描述

抽象主题(Subject)类:送餐接口

public interface 送餐
{
    void SendMeal(string address);
}

真实主题(Real Subject)类:饺子馆

using System;

public class 饺子馆 : 送餐
{
    public void SendMeal(string address)
    {
        Console.WriteLine("饭店员工送到" + address);
    }

    public void SetMeal()
    {
        Console.WriteLine("一盘饺子");
    }
}

代理(Proxy)类:跑腿小哥

using System;

public class 跑腿小哥 : 送餐
{
    饺子馆 dumplings = new 饺子馆();

    public void GetMeal()
    {
        Console.WriteLine("外卖小哥去到餐:");
        dumplings.SetMeal();
    }

    public void SendMeal(string address)
    {
        Console.WriteLine("跑腿小哥送到" + address);
    }
}

测试

using System;

class Program
{
    static void Main(string[] args)
    {
        顾客 boy = new 顾客();
        boy.Address = "东方红1号街2单元201";

        饺子馆 n = new 饺子馆();
        n.SetMeal();
        n.SendMeal(boy.Address);

        跑腿小哥 m = new 跑腿小哥();
        m.GetMeal();
        m.SendMeal(boy.Address);

        Console.Read();
    }
}

输出示例
在这里插入图片描述
代理模式的应用场景

当无法或不想直接引用某个对象或访问某个对象存在困难时,可以通过代理对象来间接访问。使用代理模式主要有两个目的:一是保护目标对象,二是增强目标对象。

前面分析了代理模式的结构与特点,现在来分析以下的应用场景。

  • 远程代理,这种方式通常是为了隐藏目标对象存在于不同地址空间的事实,方便客户端访问。例如,用户申请某些网盘空间时,会在用户的文件系统中建立一个虚拟的硬盘,用户访问虚拟硬盘时实际访问的是网盘空间。
  • 虚拟代理,这种方式通常用于要创建的目标对象开销很大时。例如,下载一幅很大的图像需要很长时间,因某种计算比较复杂而短时间无法完成,这时可以先用小比例的虚拟代理替换真实的对象,消除用户对服务器慢的感觉。
  • 安全代理,这种方式通常用于控制不同种类客户对真实对象的访问权限。
  • 智能指引,主要用于调用目标对象时,代理附加一些额外的处理功能。例如,增加计算真实对象的引用次数的功能,这样当该对象没有被引用时,就可以自动释放它。
  • 延迟加载,指为了提高系统的性能,延迟对目标的加载。例如,Hibernate 中就存在属性的延迟加载和关联表的延时加载。

设计模式------首页

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值