设计模式之代理模式

来源:互联网 发布:用php做99乘法表 编辑:程序博客网 时间:2024/06/08 09:16
现在有这样一种场景,有个管理员,管理员可以可以进行某些操作,但是这个管理员不可更改,现在想在每次管理员做这些操作的时候,都记录一下时间。这些记录时间操作对原来的才做不能有任何影响。为了解决这种问题,我们必须给管理员创建一个代理(管理员不可修改),这个代理可以做管理员做的所有事情,同时做的时候还可以记录时间。这种解决方案就可以称之为“代理模式”
下面就用简单的代码实现一下上面的逻辑
首先定义管理员抽象类以及管理员能够做的操作
package com.yf.designpattern.proxy;public interface Admin {public void doSomething();}

定义一个超级管理员
package com.yf.designpattern.proxy;public class Administrator implements Admin {@Overridepublic void doSomething() {System.out.println("我的地盘,我做主.......");}}

管理员代理类,在管理员操作之前记录时间
package com.yf.designpattern.proxy;public class AdminProxy implements Admin {private Admin admin;public AdminProxy(Admin admin) {this.admin = admin;}@Overridepublic void doSomething() {System.out.println("本次管理员操作时间为:"+System.currentTimeMillis());//此处防止实例化代理时传入null而引发空指针异常if(admin==null){admin=new Administrator();}admin.doSomething();}}


测试类:
package com.yf.designpattern.proxy;public class Main {public static void main(String args[]){AdminProxy ap=new AdminProxy(null);for(int i=0;i<5;i++){System.out.print("管理员第"+i+"次操作,");ap.doSomething();}}}

代理最大的好处是在不干扰源码的前提下增加系统功能,比如增加日志,记录行为等,这种思想就是Spring AOP的核心思想
原创粉丝点击