代理模式(静态)
1、定义:在原有类(原有物品)的基础上,增强了其功能,原有的类不动
2、为什么需要代理模式:有些类,我们不想或者不能改变他们的功能,动了反而不好,所以就需要用代理类来增强他们的功能
3、代理模式的种类:2种
(1.1)静态代理:
      ① 增加IDAO接口
      ② DeptDAO 实现IDAO接口
      ③ 代理商DaoProxy 实现IDAO接口
      ④ 使用的时候, 通过代理商的构造器传入
      DeptDAO的实例。
      ⑤ 具体干活的时候, 调用代理类对应的方法就,干
      活就可以了。
(1.2)静态代理必须满足的3个角色
      ① 抽象角色(IDAO)
      ② 代理类(DaoProxy)
      ③ 被代理的类(DeptDAO的实例)
(1.3)静态代理缺点:如果IDAO增加了一个或者多个方法,则代理类也需要相应的增加对应的方法。必须要重新修改代理类的代码。
(1.4)代码实例:
接口
点击查看代码
public interface IDAO {
    public int save();
    public int remove();
    public int modify();
    public int findAll();
}
点击查看代码
public class DeptDAO implements IDAO{
    @Override
    public int save() {
        System.out.println("增加了一条 dept 的数据");
        return 0;
    }
    @Override
    public int remove() {
        return 0;
    }
    @Override
    public int modify() {
        return 0;
    }
    @Override
    public int findAll() {
        return 0;
    }
}
点击查看代码
public class EmpDAO implements IDAO{
    @Override
    public int save() {
        System.out.println("增加了一条 emp 的数据");
        return 0;
    }
    @Override
    public int remove() {
        return 0;
    }
    @Override
    public int modify() {
        return 0;
    }
    @Override
    public int findAll() {
        return 0;
    }
}
点击查看代码
package com.bh.proxy;
import com.bh.dao.IDAO;
public class DaoProxy implements IDAO {
    private IDAO rawDao;
    public DaoProxy(IDAO rawDao){
        this.rawDao = rawDao;
    }
    @Override
    public int save() {
        System.out.println("start============");
        rawDao.save();
        System.out.println("end==============");
        return 0;
    }
    @Override
    public int remove() {
        return 0;
    }
    @Override
    public int modify() {
        return 0;
    }
    @Override
    public int findAll() {
        return 0;
    }
}
点击查看代码
package com.bh.test;
import com.bh.dao.DeptDAO;
import com.bh.proxy.DaoProxy;
public class Test {
    public static void main(String[] args) {
        //IDAO deptDao = new DeptDAO();
        //deptDao.save();
        //IDAO empDao = new EmpDAO();
        // empDao.save();
        //使用代理类
        DeptDAO deptDAO = new DeptDAO();
        DaoProxy daoProxy = new DaoProxy(deptDAO);
        daoProxy.save();
    }
}
点击查看结果
start============
增加了一条 dept 的数据
end==============

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号