今天给你们分享的是java设计模式之代理模式中的静态代理模式,动态代理模式将在后面文章中给出。若有不足,敬请指正。java
需求: DAO 层的代码操做。咱们知道分别有数据库
package com.xkt.dao; /** * @author lzx * * @param <T> */ public interface DAO<T> { /** * 增长记录 * * @param entity * @return */ int insert(T entity); /** * 删除记录 * * @param id * @return */ int deleteById(Integer id); /** * 查询记录 * * @param id * @return */ T findById(Integer id); /** * 记录 * * @param entity * @return */ int update(T entity); }
package com.xkt.dao; import com.xkt.pojo.Student; /** * @author lzx * */ public class StudentDAO implements DAO<Student> { @Override public int insert(Student entity) { // 3.封装参数(每一个方法都不一样的) System.out.println("-封装插入数据-"); // 4.操做(每一个方法都不一样的) System.out.println("-操做-插入数据-" + entity.getStudentName()); return 1; } @Override public int deleteById(Integer id) { // 3.封装参数(每一个方法都不一样的) System.out.println("-封装删除数据-"); // 4.操做(每一个方法都不一样的) System.out.println("-操做-插入数据-"); return 1; } @Override public Student findById(Integer id) { // 3.封装参数(每一个方法都不一样的) System.out.println("-封装查询数据-"); // 4.操做(每一个方法都不一样的) System.out.println("-操做-查询数据-"); return null; } @Override public int update(Student entity) { // 3.封装参数(每一个方法都不一样的) System.out.println("-封装更新数据-"); // 4.操做(每一个方法都不一样的) System.out.println("-操做-更新数据-"); return 1; } }
注意:代理类与原始类都须要实现相同的接口编程
package com.xkt.proxy; import com.xkt.dao.DAO; import com.xkt.pojo.Student; public class ProxyDAO implements DAO<Student> { private DAO<Student> source; public ProxyDAO(DAO<Student> source) { this.source = source; } @Override public int insert(Student entity) { // 1.得到数据库链接(相同的) System.out.println("-得到数据库链接-"); // 2.得到操做对象(相同的) System.out.println("-得到操做对象-"); int count = source.insert(entity); // .关闭(相同的) System.out.println("-关闭-"); return count; } @Override public int deleteById(Integer id) { // 1.得到数据库链接(相同的) System.out.println("-得到数据库链接-"); // 2.得到操做对象(相同的) System.out.println("-得到操做对象-"); int count = source.deleteById(id); // .关闭(相同的) System.out.println("-关闭-"); return count; } @Override public Student findById(Integer id) { // 1.得到数据库链接(相同的) System.out.println("-得到数据库链接-"); // 2.得到操做对象(相同的) System.out.println("-得到操做对象-"); Student student = source.findById(id); // .关闭(相同的) System.out.println("-关闭-"); return student; } @Override public int update(Student entity) { // 1.得到数据库链接(相同的) System.out.println("-得到数据库链接-"); // 2.得到操做对象(相同的) System.out.println("-得到操做对象-"); int count = source.update(entity); // .关闭(相同的) System.out.println("-关闭-"); return count; } }
package com.xkt.test; import org.junit.Test; import com.xkt.dao.StudentDAO; import com.xkt.pojo.Student; import com.xkt.proxy.ProxyDAO; public class StudentDAOTest { @Test public void insert() { StudentDAO studentDAO = new StudentDAO(); ProxyDAO proxyDAO = new ProxyDAO(studentDAO); Student entity = new Student(); entity.setStudentName("张三"); proxyDAO.insert(entity); } }
可使用动态代理模式。设计模式
所谓的动态代理模式,就是能够自由的不指定的使用任何接口来实现代理。所谓的动态就不须要指定代理类的固定接口!!!ide
版权说明:欢迎以任何方式进行转载,但请在转载后注明出处!测试