***代理设计模式***

代理设计模式
代理设计模式:在不修改目标类源代码的前提下,对其功能的增强。
一,静态代理设计模式:
首先要有一个Xxxdao类的接口,开发一个类实现Xxxdao接口,然后开发代理类。
2,代理类要持有一个目标类的引用,定义有参构造方法,将目标类对象传入代理对象中,代理类相同的功能方法,使用持有的引用调用目标类对象,对其功能的增强。
开发代码如下:
//接口
public interface IStudentDao {
//抽象方法:列表
void list();
}
//目标类“:
public class StudentAction implements IStudentDao {
public void list(){
System.out.println(“学生列表”);
}
}
//代理工厂类:
public class StudentProxy implements IStudentDao {
//目标类的引用。
private StudentAction target;
//有参构造对目标类初始化
public StudentProxy(StudentAction target){
this.target=target;
}
//定义一个跟目标类相同的方法。
public void list(){
System.out.println(“功能增强了”);
target.list();
System.out.println(“功能增强了”);
}
}
//测试:
public class StudentActionTest{
public static void mian(String[] args){
//目标类原有的功能。
StudentAction target = new StudentAction();
target.list();
//分割线。
System.out.println("------------------------");
//代理工厂对象。
StudentProxy proxy=new StudentProxy(target);
//目标类增强了
proxy.list();
}
}
总结:通过测试,标明有目标类功能,并且还增强了,
为了保证目标类的功能,代理类也有,必须实现相同的接口。
静态代理的优缺点:
优点:在不修改目标类源代码的情况下,对目标类功能的增强。
缺点:1,必须要实现续相同的接口。
2,目标类功能的增加和减少,对会对代理类产生影响。
3,产生很对代理类,是增量式开发。
二,cglib动态代理设计模式。
cglib动态代理需要添加:cglib架包;
//目标类
public class StudentAction {
public void list(){
System.out.println(“学生列表”);
}
}
//代理工厂类:
public class StudentProxy implements IStudentDao {
//目标类的引用。
private Object target;
//有参构造对目标类初始化
public StudentProxy(Object target){
this.target=target;
}
//定义一个跟目标类相同的方法。
public Object createproxy(){
//使用cglib的API创建代理对象。
Enhancer enhancer=new Enhancer();
//设置父类
enhancer.setSuperclass(target.getClass());
//设值回调函数;
enhancer.setCallback(new MethodInterceptor(){
//匿名内部类
@Override
public Object intercept(Object arg0, Method method, Object[] args, MethodProxy arg3) throws Throwable {
System.out.println(“功能增强了”);
//反射掉用目标类放法
Object target= method.invoke();
System.out.println(“功能增强了”);
}
})
}
}
//测试;
public class TestProxy {
public static void main(String[] args) {
//1、测试目标 类的功能
StudentDao target = new StudentDao();
target.save();
//分割线
System.out.println("-------------");
//2、测试代理对象的功能
TxProxyFactory proxyFactory = new TxProxyFactory(target);
Object proxy = proxyFactory.createProxy(); UserDao p = (UserDao) proxy;
p.save();
}
}
cglib的优缺点:
优点:1,在不修改目标类源代码的情况下,对目标类功能的增强。
2,目标类功能的增加和减少,不会对代理类产生影响。
3,不用实现统一的接口。
4,一个代理对象可以为任意目标类代理,不是增量式开发。
缺点:cglib是第三方架包,有可能会收费。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值