代理模式的英文叫做Proxy,中文都可译为”代理“,所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
在Spring框架中,广泛存在基于代理模式的面向切面编程,用作LOG日志记录和事务提交。下面用一个仿javaee的程序简单实现静态代理。
package com.StaticProxy.proxy; import java.util.List; import com.StaticProxy.DAO.IUserDAO; import com.StaticProxy.DAO.UserDAO; import com.StaticProxy.user.User; public class StaticProxy implements IUserDAO{ private IUserDAO iUserDAO; public IUserDAO bind(IUserDAO userDao) { this.iUserDAO = userDao; return this; } //增加log记录 private void log(String name) { System.out.println("操作:" + name + " 日志记录"); } //commit事务处理 private void commit() { System.out.println("commit事务提交"); } @Override public void doCreate(User user) { log("doCreate"); this.iUserDAO.doCreate(user); commit(); } @Override public void doUpdate(User user) { log("doUpdate"); this.iUserDAO.doUpdate(user); commit(); } @Override public void doRemove(User user) { log("doRemove"); this.iUserDAO.doRemove(user); commit(); } @Override public User findById(Integer id) { log("doRemove"); this.iUserDAO.findById(id); commit(); return null; } @Override public List<User> findAll() { log("doRemove"); this.iUserDAO.findAll(); commit(); return null; } public static void main(String[] args) { IUserDAO userDao = new UserDAO(); IUserDAO StaticProxy = new StaticProxy().bind(userDao); User user = new User(); StaticProxy.findAll(); } }