静态代理(JAVA设计模式)

代理:一个角色代表另一个角色来完成某些特定的功能,当我们需要在一个方法的前后添加逻辑的时候(日志,事务等)可以使用代理。

静态代理可以使用两种方式实现:一种是继承,一种是聚合。

1.定义接口Moveable

2.实现类Tank

3.在Tank的move方法前后添加时间日志(继承方式)或系统日志(聚合方式)


public interface Moveable {
	void move();
}

//需要代理的对象
public class Tank implements Moveable{
	
	public void move() {
		System.out.println("tank move");
	}

}


//第一种:以继承的方式实现静态代理,在方法前后添加逻辑
public class TimeProxy extends Tank{

	@Override
	public void move() {
		System.out.println("timeProxy start...");
		super.move();
		System.out.println("timeProxy end...");
	}

	public static void main(String[] args) {
		Moveable m = new TimeProxy();
		m.move();//调用了代理后的方法。
	}
}

//第二种:以聚合的方式实现代理类,为方法前后添加日志
public class LogProxy implements Moveable{
	Moveable m;
	public LogProxy(Moveable m) {
		this.m = m;
	}
	public void move() {
		System.out.println("move log start...");
		m.move();
		System.out.println("move log end...");
	}
	public static void main(String[] args) {
		Moveable mm = new Tank();
		mm = new LogProxy(mm);//这个代理类只能给Moveable接口的类进行代理,我们需要创建任意接口的代理类(动态代理)
		mm.move();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值