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(“旺仔”);
}
}
打印结果:
java静态代理_第1张图片
****案例二:聚合
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.测试结果:
java静态代理_第2张图片

你可能感兴趣的:(java的代理)