Java中的代理模式

前几天一个网友指出了我的文章中一些有失偏颇之处,那些文章都是我在阅读Java Core的时候做的总结,顺便加上我个人的一些理解。因为看的e文版,理解上有些地方可能还欠妥。下面谈一下对Java中代理模式(Proxy)的认识。

代理,想必大家都应该知道是什么冬冬了,一般的手机产商都有代理商,歌星们都有自己的经纪人,如此这些都可以看作是一种代理模式。下面我选择如下的一种情景来进行讲述:某董事长出差,但是此时公司有个聚会,董事长买单,但是由他的秘书去结帐。我们就权且把这个看作一个代理行为,^_^。

首先我们定义一个接口:商人(Merchant),如下所示:

package cn.edu.hust.cm.test;

public interface Merchant {

    void treat();//商人都要请客吃饭滴,^_^

}

然后我们定义一个类:董事长(Director),如下所示:

package cn.edu.hust.cm.test;

public class Director implements Merchant {

       public Director() {

       }

       public void treat() {

              System.out.println("董事长请大家吃饭");

       }

}

OK,我们现在要给他找代理了,这个代理就是他的秘书(Secretary)。这里要涉及到一些代理的机制了。在Java中,用来做代理的类一般都要实现InvocationHandler,实现它的invoke方法,至于为啥是这样俺也不知道了,^_^。另外,当我们产生一个代理实例(proxy instance)的时候,只要我们通过这个实例调用任何方法,都会导致invoke方法的调用,还是看例子吧,如下所示:

package cn.edu.hust.cm.test;

 

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;

 

public class Secretary implements InvocationHandler {

       public Secretary(Director director) {

              this.director=director;

       }

       public Object invoke(Object arg0, Method arg1, Object[] arg2)

                     throws Throwable {

        director.treat();

              System.out.println("由秘书结帐咯!");

              return null;

       }

       private Director director;

}

现在我们开始构建我们的主体测试代码,如下面的代码所示:

package cn.edu.hust.cm.test;

 

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Proxy;

 

public class ProxyTest extends Proxy {

 

       public ProxyTest(InvocationHandler arg0) {

              super(arg0);

       }

       public static void main(String[] args) {

              Director director=new Director();

              InvocationHandler secretary=new Secretary(director);

              Merchant merchant=(Merchant)Proxy.newProxyInstance(director.getClass().getClassLoader(),director.getClass().getInterfaces(),secretary);

              merchant.treat();

       }

 

}

运行程序,输出将为:董事长请客

由秘书结帐咯!

这里有几个要说明的地方,如下所述:

1.Proxy.newProxyInstance方法的作用,它的作用为某个对象创建一个代理对象,本例中是为director创建了一个代理对象,这个对象属于哪个类呢?我们在程序里面加这样一句System.out.println(merchant.getClass().getName()),输出是$Proxy0,呵呵,说明已经产生了一个代理类了,这个类实现了director所属类中的所有接口。

2.代理的实现机制问题。个人觉得这个似乎就是一个事件处理的机制,当代理对象调用某个方法的时候,就会触发相应的invoke方法。因此Proxy.newProxyInstance方法的第三个参数就相当于给这个代理对象注册了一个监听器。

Proxy类还有几个方法,用法可以查看相应的API文档。

计及风电并网运行的微电网及集群电动汽车综合需求侧响应的优化调度策略研究(Matlab代码实现)内容概要:本文研究了计及风电并网运行的微电网及集群电动汽车综合需求侧响应的优化调度策略,并提供了基于Matlab的代码实现。研究聚焦于在高渗透率可再生能源接入背景下,如何协调微电网内部分布式电源、储能系统与大规模电动汽车充电负荷之间的互动关系,通过引入需求侧响应机制,建立多目标优化调度模型,实现系统运行成本最小化、可再生能源消纳最大化以及电网负荷曲线的削峰填谷。文中详细阐述了风电出力不确定性处理、电动汽车集群充放电行为建模、电价型与激励型需求响应机制设计以及优化求解算法的应用。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事新能源、微电网、电动汽车等领域技术研发的工程师。; 使用场景及目标:①用于复现相关硕士论文研究成果,深入理解含高比例风电的微电网优化调度建模方法;②为开展电动汽车参与电网互动(V2G)、需求侧响应等课题提供仿真平台和技术参考;③适用于电力系统优化、能源互联网、综合能源系统等相关领域的教学与科研项目开发。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注模型构建逻辑与算法实现细节,同时可参考文档中提及的其他相关案例(如储能优化、负荷预测等),以拓宽研究视野并促进交叉创新。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值