java静态代理

java设计模式—代理

静态代理
生活中的代理:我代理小明去买白菜,如果是小明去菜市场买白菜,那么我代理小明去菜市场买白菜,我在小明买白菜的基础上可以买些苹果,梨子等各种东西,就是对小明买白菜这件事的增强
代理对象增强后的对象
目标对象:要增强的对象

案例一:继承

java中拿一个用户登录打印用户名的例子:
写一个类来登录打印登录成功
1.类UserDaoImpl
public class UserDaoImpl {
public void login(String name){
System.out.println(name+“login success”);
}
}

写另一个类继承UserDaoImpl类重写其中的login方法,并且在重写方法中打印了日志
2.LogUserProxy
public class LogUserProxy extends UserDaoImpl {
@Override
public void login(String name) {
System.out.println(“log…”);
super.login(name);
}
}

3.Test测试类
public class Test {
public static void main(String[] args) {
UserDaoImpl userDao = new LogUserProxy();
userDao.login(“旺仔”);
}
}
打印结果:
在这里插入图片描述
****案例二:聚合
1.写一个接口UserDao
public interface UserDao {
void login(String name);
}
2.使用UserDaoImpl来实现接口,UserDaoImpl为目标对象
public class UserDaoImpl implements UserDao {
public void login(String name){
System.out.println(name+“login success”);
}
}
3.代理类LogUserProxy2来实现UserDao接口,并且在其构造方法中将UserDao对象当参数赋值,LogUserProxy2为代理对象
public class LogUserProxy2 implements UserDao{
UserDao userDao;
public LogUserProxy2(UserDao userDao){
this.userDao=userDao;
}

public void login(String name) {
System.out.println(“log…”);
userDao.login(name);
}
}
4.在测试类中使用目标对象对其实例化,将实例化后的对象当参数传入代理对象的构造方法中让其代理,再调用代理对象的登录方法
public class Test {
public static void main(String[] args) {
UserDao userDao = new UserDaoImpl();
UserDao proxy = new LogUserProxy2(userDao);
proxy.login(“旺仔”);
}
}
5.测试结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值