设计模式-代理模式简单实验

设计模式-代理模式

代理模式实例之日志记录代理

1. 类图

上图为该次实验的类图

2. 实现代码
(1)AbstractSubject抽象类

package proxy;

public abstract class AbstractSubject {
    public abstract void method();
}

(2)LoggerProxy代理类

package proxy;

import java.text.SimpleDateFormat;

public class LoggerProxy extends AbstractSubject {
    private BusinessClass businessClass = new BusinessClass();
    @Override
    public void method() {
        before();
        businessClass.method();
        after();
    }

    public void before(){
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("业务方法被调用, 调用时间为: " + df.format(System.currentTimeMillis()));
    }
    public void after(){
        System.out.println("业务方法调用完成");
    }
}

(3)被代理类

package proxy;

public class BusinessClass extends AbstractSubject{
    @Override
    public void method() {
        System.out.println("执行业务");
    }
}

(4)Client客户类

package proxy;

public class Client {
    public static void main(String[] args) {
       //面向父类编程,符合开闭原则
        AbstractSubject abstractSubject;
        //抽象父类的具体子类对象从ProxyXMLUtil.getBean()方法中获得
        //该方法是从xml文件中获取具体的代理类
        abstractSubject = (AbstractSubject) ProxyXMLUtil.getBean();

        abstractSubject.method();
    }
}

(5)ProxyXMLUtil辅助类

package proxy;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;

public class ProxyXMLUtil
{
	public static Object getBean()
	{
		try
		{
			DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = dFactory.newDocumentBuilder();
			Document doc;
										
			doc = builder.parse(new File("D:\\Idea_project\\DesignPattern\\src\\proxy\\ProxyConfig.xml"));
			NodeList nl = doc.getElementsByTagName("className");
            Node classNode=nl.item(0).getFirstChild();
            String cName=classNode.getNodeValue();
  
            Class c=Class.forName(cName);
	  	    Object obj=c.newInstance();
            return obj;
           }   
           	catch(Exception e)
           	{
           		e.printStackTrace();
           		return null;
           	}
		}
}

(6)XML配置文件

<?xml version="1.0"?>
<config>
    <className>proxy.LoggerProxy</className>
</config>

3.输出结果
在这里插入图片描述

以上就是本次代理模式的简单实验啦,另外,当想要更换代理类实现不同的操作时,只需在XML文件中填入对应的类即可,无需修改客户端的源代码,这样很好的支持了开闭原则

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xulidanga

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值