代理模式

代理模式所讲的就是现实生活中的这么一个概念:中介
代理模式的定义:给某一个对象提供一个代理,并由代理对象控制对原对象的引用。
代理模式包含如下角色:

  • ISubject:抽象主题角色,是一个接口。该接口是对象和它的代理共用的接口。
  • RealSubject:真实主题角色,是实现抽象主题接口的类。
  • Proxy:代理角色,内部含有对真实对象RealSubject的引用,从而可以操作真实对象。代理对象提供与真实对象相同的接口,以便在任何时刻都能代替真实对象。同时,代理对象可以在执 行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。

实现动态代理的关键技术是反射。

主要分为两类,静态代理和动态代理。静态代理比较简单,是由程序员编写的代理类,并在程序运行前就编译好的,而不是由程序动态产生代理类,这就是所谓的静态。

静态代理:

应用场景: 操作日志,这是很常见的。此时就可以使用代理模式。
实现: 通过聚合和继承两种方式实现。

/**方式一:聚合式静态代理
 * @author Goser    (mailto:goskalrie@163.com)
 * @Since 2016年9月7日
 */
//1.抽象主题接口
public interface Manager {
    void doSomething();
}
//2.真实主题类
public class Admin implements Manager {
    public void doSomething() {
        System.out.println("Admin do something.");
    }
}
//3.以聚合方式实现的代理主题
public class AdminPoly implements Manager{
    private Admin admin;

    public AdminPoly(Admin admin) {
        super();
        this.admin = admin;
    }

    public void doSomething() {
        System.out.println("Log:admin操作开始");
        admin.doSomething();
        System.out.println("Log:admin操作结束");
    }
}
//4.测试代码
        Admin admin = new Admin();
        Manager m = new AdminPoly(admin);
        m.doSomething();
//方式二:继承式静态代理
//与上面的方式仅代理类和测试代码不同
//1.代理类
public class AdminProxy extends Admin {
    @Override
    public void doSomething() {
        System.out.println("Log:admin操作开始");
        super.doSomething();
        System.out.println("Log:admin操作开始");
    }
}
//2.测试代码
        AdminProxy proxy = new AdminProxy();
        proxy.doSomething();
动态代理:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值