千峰学习的53天:今天学了静态代理类设计模式,装饰者设计模式,动态代理模式
package util;
import dao.UserDao;
public class UserDaoWrapper implements UserDao {
private UserDao userDao;
public UserDaoWrapper(){}
public UserDaoWrapper(UserDao userDao){
this.userDao=userDao;
}
public void useradd() {
System.out.println("aa");
userDao.useradd();
System.out.println("bb");
}
@Override
public void userdelete() {
userDao.userdelete();
}
@Override
public void userupdate() {
}
@Override
public void userselete() {
}
}
package util;
import dao.UserDao;
import dao.UserDaoImpl;
public class UserDaoProxy implements UserDao {
private UserDao userDao;
public UserDaoProxy(){
userDao=new UserDaoImpl();
}
@Override
public void useradd() {
System.out.println("aa");
userDao.useradd();
System.out.println("bb");
}
@Override
public void userdelete() {
userDao.userdelete();
}
@Override
public void userupdate() {
userDao.userupdate();
}
@Override
public void userselete() {
userDao.userselete();
}
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class Demo02 {
public static void main(String[] args) {
UserDao userDao=new UserDaoImpl();
UserDao userDaoPrxy = (UserDao)Proxy.newProxyInstance(
userDao.getClass().getClassLoader(),
userDao.getClass().getInterfaces(),
new MyInvocationHandler(userDao)
);
userDaoPrxy.useradd();
userDaoPrxy.userdelete();
}
}
class MyInvocationHandler implements InvocationHandler{
private UserDao userDao;
public MyInvocationHandler(UserDao userDao) {
this.userDao=userDao;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
String methodName=method.getName();
Object re=null;
if(methodName.equals("useradd")){
System.out.println("aaaaaa");
re=method.invoke(userDao,args);
System.out.println("aaaaaa");
}else {
re=method.invoke(userDao,args);
}
return re;
}
}
package dao;
import dao.UserDao;
public class UserDaoImpl implements UserDao {
@Override
public void useradd() {
System.out.println("UserDao.useradd");
}
@Override
public void userdelete() {
System.out.println("UserDao.userdelete");
}
@Override
public void userupdate() {
}
@Override
public void userselete() {
}
}