《C#设计模式》--03.代理设计模式(结构型设计模式)


提示:以下是本篇文章正文内容,下面案例可供参考

一、基本概念

1)代理设计模式:为其他对象提供一种代理,以控制对这个对象的访问。
2)代理分类:

  • 远程代理:为一个对象在不同的地址空间,提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。客户端调用Web服务,会生成WebReference文件和文件夹,WebReference就是代理,使得客户端可以实现远程访问等功能。
  • 虚拟代理,如果要创建开销很大的对象,可以通过代理来存放实例化需要很长时间的真实对象。打开一个很大的网页,除了文字先出现外,图片和视频等都是慢慢出现的。查询某个部门下所有的员工的信息,姓名、性别、年龄、毕业院校、部门、照片、slogen…
  • 安全代理,用来控制真实对象的访问权限。例如订单系统,要求是:一旦订单被创建,只有订单的创建人才可以修改订单中的数据,其他人则不能修改

二、代码示例

普通代理

一个非常简单的例子

public class Swim
{
   
    public virtual void Go()
    {
   
        Console.WriteLine("开始游泳!!!");
    }
}

public class SwimProxy:Swim
{
   
    public override void Go()
    {
   
         //目标方法执行前
        Console.WriteLine("先进性热身运动!!!");
        base.Go();
        //目标方法执行后
        Console.WriteLine("开始洗澡!!!");
    }
}

使用案例

SwimProxy swimProxy = new SwimProxy();
swimProxy.Go();

通过代理模式,在目标方法执行前,执行后进行处理,甚至可以要求传入参数,来判断年纪过大不允许游泳,如果要这么做,做一些权限管控,可以使用非继承的方式,内部声明Swim对象即可。

动态代理

在编译期间不生成代理,而是在执行期间,动态创建代理类。

DispatchProxy基本使用

DispatchProxy是一个基于接口的动态代理工具类。
1)使用要求:如果当前类允许动态代理,则必须实现一个业务接口
2)注意:

  • 动态代理生成的动态类对象是业务接口类型对象,所以只有实现了接口方法的具体方法才会被监听到执行
  • 当前类的其他virtual方法如果不是来自业务接口,由于生成的代理对象是业务接口类型,无法调用
    3)代码演示
/// <summary>
/// 一个接口
/// </summary>
public interface Sport
{
   
    public void Swim();
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值