代理模式の静态代理

代理 模式 之 静态代理

关键字 代理类 目标类

静态代理:代理类 要与目标类实现一样的接口。

静态代理的思想是:

通过在代理类中重写接口中的方法,对目标类中重写的接口的方法进行增强。

代理类中需要有目标类的对象作为代理类的成员变量,通过在代理类中重写的接口的方法中使用目标类的对象调用目标类中的该重写方法,并在代理类中的该重写的方法中添加想要增强的功能的代码,来进行方法增强。

具体实现代码举例如下:

接口的代码为

//创建接口
public interface IUserDao {
	//声明方法
	public void save();
	
}
目标类的代码:

//目标类target
public class UserDao implements IUserDao {

	@Override
	public void save() {
		System.out.println("目标类中的save()方法");
	}
}


代理类的代码:

//代理类(静态代理)
public class UserDaoProxy implements IUserDao{

	//声明私有化成员变量,创建接口的对象,并未初始化
	private IUserDao userDao;
	
	//通过构造方法,初始化成员变量.接收并保存目标对象
	//创建代理类的对象时,通过该构造方法传递参数
	public UserDaoProxy(IUserDao iuser){
		this.userDao = iuser;
	}
	
	//重写save()方法,增强方法
	@Override
	public void save() {
		// TODO Auto-generated method stub
		System.out.println("开启事务管理");
		userDao.save();//执行的是目标对象的方法
		System.out.println("提交事务");
	}
}

测试类代码:

//测试类
public class StaticProxyTest {
 
	@Test
	public void testStatiProxy() throws Exception {
		//创建目标对象,这里体现了多态
		IUserDao user = new UserDao();
		//创建代理对象,接收目标对象
		UserDaoProxy userDaoProxy = new UserDaoProxy(user);
		
		//通过代理对象调用代理类中的方法(即为增强后的目标方法)
		userDaoProxy.save();
		
	}
}

总结:静态代理的优缺点

1)可以做到在不修改目标类的功能的前提下,对目标类进行功能扩展

2)缺点:

a.因为代理类,需要与目标类实现一样的接口,所以会有很多代理类,会造成类太多的情况。

b.一旦接口中增加方法,目标类与代理类都要进行维护。

解决的方案:可以使用动态代理。







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值