设计模式 _第六招式_代理模式

一、定义
代理模式也叫委托模式,为其它对象提供一种代理以控制对这个对象的访问,它是一项基本设计技巧。许多其他的设计模式,如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式,在应用中,代理模式提供非常好的访问控制。在一些著名的开源软件中也经常见到它的身影,如Struts2 的from元素映射就采用了代理模式。

二、代码演示

  • 代理模式通用类图

这里写图片描述
Subject抽象主体角色
抽象主体可以是抽象类也可以是接口,是一个最普通的业务类型定义,无特殊要求

public interface Subject {
    //定义一个方法
    public void request();
}
  • RealSubject具体的主体角色
    也叫被委托角色、被代理角色。是业务逻辑的具体执行者。
public class RealSubject implements Subject {
    //实现方法
    public void  request(){
        //业务逻辑处理
        System.out.println("RealSubject 业务逻辑处理");
    }
}
  • Proxy代理主体角色
    也叫做委托类、代理类。他负责对真实角色的应用,把所有抽象主题类定义的方法限制委托给真实主体角色实现,并且在真实主题角色处理完毕前后做预处理和善后工作。
public class Proxy implements Subject {
    //要代理的哪个实现类
    private Subject  subject = null ;
    //默认被代理者
    public Proxy(){
        this.subject = new Proxy();
    }
    //通过构造函数传递代理者
   public Proxy(Object ... objects){
   }
   public  Proxy(Subject _subject){
        this.subject = _subject;
   }
    @Override
    public void request() {
        this.before();
        this.subject.request();
        this.after();
    }
    //预处理
    public void before(){
     System.out.println("预处理");
    }
    //善后处理
    private  void after(){
        System.out.println("善后处理");
    }
}
  • 场景类
public class Client {
    public  static void main(String args[]){
        Proxy  proxy = new  Proxy(new RealSubject());
        proxy.request();
    }
}

三、优点

  • 职责清晰
    真正的角色就是实际的业务逻辑,不用关心其他非本职的事务,通过后期代理统一完成事务。
  • 高扩展性
    具体主题角色是随时可以变化的,只要实现了接口,那代理类完全不用做任何修改。

四、缺点

五、应用场景
代理模式的使用场景非常多,可以看看Spring AOP ,是一个非常典型的动态代理。

六、注意事项

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值