设计模式练习(11)——代理模式

来源:互联网 发布:创维酷开如何安装软件 编辑:程序博客网 时间:2024/06/11 00:27

代理模式

一、题目:

在某应用软件中,需要记录业务方法的调用日期,在不修改现有业务类的基础上,为每一个类提供一个日记记录代理类,在代理类中输出日志,如在业务方法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();    }}

五、运行结果:

这里写图片描述

0 0
原创粉丝点击