静态代理模式示例

来源:互联网 发布:国泰安数据服务中心 编辑:程序博客网 时间:2024/05/29 11:29

代理模式的英文叫做Proxy,中文都可译为代理,所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

在Spring框架中,广泛存在基于代理模式的面向切面编程,用作LOG日志记录和事务提交。下面用一个仿javaee的程序简单实现静态代理。

1.建立一个User用户

package com.StaticProxy.user;public class User {private Integer id;private String  name;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}

2.建立一个DAO的Interface接口类,定义基本的CRUD操作

package com.StaticProxy.DAO;import java.util.List;import com.StaticProxy.user.User;public interface IUserDAO {public void doCreate(User user);public void doUpdate(User user);public void doRemove(User user);public User findById(Integer id);public List<User> findAll();}

3.DAO类实现接口

package com.StaticProxy.DAO;import java.util.List;import com.StaticProxy.user.User;public class UserDAO implements IUserDAO {@Overridepublic void doCreate(User user) {System.out.println("创建一个用户:doCreate");}@Overridepublic void doUpdate(User user) {System.out.println("修改一个用户:doUpdate");}@Overridepublic void doRemove(User user) {System.out.println("删除一个用户:doRemove");}@Overridepublic User findById(Integer id) {System.out.println("查询一个用户:findById");return null;}@Overridepublic List<User> findAll() {System.out.println("查询所有用户:findAll");return null;}}

4.静态代理类StaticProxy,同时简单写一个main函数进行测试

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事务提交");}@Overridepublic void doCreate(User user) {log("doCreate");this.iUserDAO.doCreate(user);commit();}@Overridepublic void doUpdate(User user) {log("doUpdate");this.iUserDAO.doUpdate(user);commit();}@Overridepublic void doRemove(User user) {log("doRemove");this.iUserDAO.doRemove(user);commit();}@Overridepublic User findById(Integer id) {log("doRemove");this.iUserDAO.findById(id);commit();return null;}@Overridepublic 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();}}


5.简单测试一个方法findAll(),可以看到执行结果中前面记录了log日志,后面提交了事务



0 0
原创粉丝点击