代理模式

代理模式

静态代理模式:

代理:
代理可以帮助被代理者完成前期的准备工作,后期的善后工作。核心的业务逻辑任然由被代理者完成。

代码结构:
(1)接口:主题
(2)被代理者
(3)代理者

要求:代理类和被代理类实现同一个主题接口
代理类中要有一个被代理类的属性(target),这样才能把核心业务代码交给被代理者完成

这些需求是和核心业务逻辑无关的代码;而且多变,那么这样的代码可以交给代理完成。
需求:
(1)要计算add()的运行时间
(2)记录add()的开始执行,已经结束执行的时间到日志中

public class TestProxy {
	public static void main(String[] args) {
		//使用代理类和被代理类来完成工作
		UserDAO bei = new UserDAO();//被代理者
		UserDAOProxy up = new UserDAOProxy(bei);//代理者
		up.add();
	}
}

//操作数据库的数据
interface DAO{
	void add();
}

class UserDAO implements DAO{
	@Override
	public void add() {
		System.out.println("添加用户");
	}	
}

class UserDAOProxy implements DAO{
	private UserDAO target;//被代理者
	
	//你可以用set方法或者构造器给它赋值
	//这里用构造器给他赋值
	public UserDAOProxy(UserDAO target) {
		super();
		this.target = target;
	}
	
	@Override
	public void add() {
		System.out.println("add方法开始执行");
		long start = System.currentTimeMillis();
		
		//核心业务逻辑要交还给被代理者完成
		target.add();
		
		long end = System.currentTimeMillis();
		System.out.println("耗时:" + (end - start));
		System.out.println("add方法结束执行");
	}	
}

示例:

//有一个接口
interface Subject{
	void doWork();
}

//被代理类
class RealClass implements Subject{

	@Override
	public void doWork() {
		System.out.println("我是干实事的");
	}
	
}

//代理类,真正的业务在这里实现
class HelpClass implements Subject{
	private Subject target;

	public HelpClass(Subject target) {
		this.target = target;
	}

	@Override
	public void doWork() {
		System.out.println("我是来视察的");
		target.doWork();
		System.out.println("干的不错");
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值