千峰学习的53天,反射

本文记录了作者在千峰学习的第53天,主要探讨了静态代理类、装饰者模式以及动态代理模式在编程中的应用和理解。
摘要由CSDN通过智能技术生成

千峰学习的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() {

    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值