代理模式
一、题目:
在某应用软件中,需要记录业务方法的调用日期,在不修改现有业务类的基础上,为每一个类提供一个日记记录代理类,在代理类中输出日志,如在业务方法Mehtod()的调用之前,输出“Method方法被调用,调用时间2016.11.18 11:11:11”,调用之后没有抛出异常则输出“Mehtod方法调用成功”,否则输出“Mehtod方法调用失败”,在代理类中调用真实业务类的业务方法,使用代理模式设计日志记录模块的结构,绘制类图并编程模拟实现。
(1)实现给出代理模式结构视图。
(2)给出该实例类图及代码实现。
二、所用模式结构视图:
三、实例类图:
四、实例实现代码:
(因为区分,所以在类的前面加了Gj19)
Service类:抽象服务类
**package ProxyPattern;
/**
* Service类:抽象服务类
* @author gong
*
*/
public interface Gj19Service {
void method();
}**
RealService:具体服务类
package ProxyPattern;
/**
* RealService:具体服务类
* @author gong
*/
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
public class Gj19RealService implements Gj19Service {
@Override
public void method() {
try {
Date date = new Date();
//format对象是用来以指定的时间格式格式化时间的
SimpleDateFormat from = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//format()方法是用来格式化时间的方法
String times = from.format(date);
System.out.println("方法method()被调用,调用时间为:" + times);
//用来产生除零异常来模拟method方法调用是否成功
Random random = new Random();
int a = random.nextInt(100);
int b = random.nextInt(10);
int c=a/b;
System.out.println("方法method()调用成功");
} catch (Exception e) {
System.out.println("方法method()调用失败");
}
}
}
Proxy类:代理服务类
package ProxyPattern;
/**
* Proxy类:代理服务类
* @author gong
*
*/
public class Gj19Proxy implements Gj19Service{
private Gj19RealService service = new Gj19RealService();
@Override
public void method() {
service.method();
}
}
代理模式客户端测试类
package ProxyPattern;
/**
* 代理模式客户端测试类
* @author gong
*
*/
public class Gj19Client {
public static void main(String[] args) {
Gj19Service service;
service = new Gj19Proxy();
service.method();
}
}
五、运行结果: