设计模式-代理模式
在某应用软件中需要记录业务方法的调用日志,在不修改现有业务类的基础上为每一个类提供一个日志记录代理类,在代理类中输出日志,例如在业务方法method()调用之前输出“方法method()被调用,调用时间为2017-11-5 10:10:10”,调用之后如果没有抛异常则输出“方法method()调用成功”,否则输出“方法method()调用失败”。在代理类中调用真实业务类的业务方法,使用代理模式设计该日志记录模块的结构,绘制类图并编程模拟实现。
类图:
实现代码:
抽象主题类Subject : package ProxyPattern;
public abstract class Subject { public abstract void method();
}
真实主题类RealSubject : package ProxyPattern;
public class RealSubject extends Subject{ @Override public void method() { System.out.println("不知道为什么就想调一下这个方法"); } }
代理主题类Proxy : package ProxyPattern;
import java.text.SimpleDateFormat; import java.util.Date;
public class Proxy extends Subject { private RealSubject realSubject ; public void before(){
Date now = new Date( ); SimpleDateFormat ft = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz"); System.out.println("方法method() 被调用,调用时间为:"+ft.format(now)); } @Override public void method() { realSubject = new RealSubject(); before(); try { realSubject.method(); after(); }catch (NullPointerException e){ System.out.println("方法method()调用失败"); }
} public void after(){ System.out.println("方法method()调用成功"); } }
客户端类Client :
public class Client { public static void main(String[] args) { Subject subject; subject = new Proxy(); subject.method(); } } |