设计模式2—Proxy设计模式

Proxy代理设计模式是一种控制对象访问的设计模式,类似于网络代理,网络代理机制如下图:

客户端——代理服务器——目标资源

Proxy代理设计模式机制如下:

客户端查询——代理程序——目标程序

代理模式UML图如下:

 

代理模式顺序图如下:

客户端程序通过代理查询访问真正的目标程序,代理查询对外隐藏了目标程序。普通代理设计模式列子代码如下:

interface ProxyBase{

 public void f();

 public void g();

 public void h();

}

//代理程序

class Proxy implement ProxyBase(){

   private ProxyBase implementation;

   public Proxy(){

      //目标程序

      implementation = new ProxyImplementation();

 }

 public void f(){

       implementation.f();

 }

 public void g(){

    implementation.g()

 }

 public void h(){

   implementation.h();

 }

//目标程序

clcass ProxyImplementation implements ProxyBase{

      public void f(){

           System.out.println("ProxyImlementation.f()");

      }

     public void g(){

            System.out.println("ProxyImplementation.g()");

     }

    public void h(){

          System.out.println("ProxyImplementation.h()");

    }

}

//客户端程序调用代理

public class ProxyDemo {

    public static void main(String[] args){

          //客户端调用代理程序

           Proxy p = new Proxy();

           p.f();

           p.g();

           p.h();

     }

}

从JDK1.3以后,java引入了动态代理机制,java的动态代理只能针对接口进行动态代理,即要实现动态代理的类必须实现接口,CGLIB提供了针对类的动态代理功能。JDK动态代理的例子如下:

//代理接口

interface Foo{

   public void f(String s);

   public void g(int i);

   public void h(int i,String s);

}

//接口实现类,即被代理类

class FooImpl implements Foo{

    public void f(String s){

            System.out.println("FooImpl.f(),s=" + s);

    }

    public void g(int i){

          System.out.println("FooImpl.g(),i=" + i);

   }

   public void h(int i,String s) {

      System.out.println("FooImpl.h(),i=" + i + ",s=" + s);

  }

}

//动态代理处理类

class ProxyHandler implements InvocationHandler {

   //代理实现类

   private Object delegate;

      public ProxyHandler(Object obj) {

           delegate = obj;

      }

      public Object invoke(Object proxy,Method method,Object[] args){

              System.out.println("Before method:" + method);

               method.invoke(this.delegate,args);

              System.out.println("After method:" + method);

              return null;

          }

     }

   public class DynamicProxyDemo{

         public static void main(String[] args){

               Foo foo = new FooImpl();

               ProxyHandler handler = new ProxyHandler(foo);

               //产生动态代理

               Foo proxy = (Foo)Proxy.newProxyInstance(Foo.class.getClassLoader(),new Class[]{Foo.class},handler);

               proxy.f("f");

               proxy.g(1);

               proxy.h("h",2);

    }

}

动态代理好普通代理的区别:动态代理中的代理类是由java.lang.reflect.Proxy类在运行期间根据接口定义,采用java反射功能动态生成的。和java.lang.reflect.InvocationHandler结合,可以加强现有类的方法实现。动态代理自定义Handler实现InvocationHandler接口,自定义Handler实例化时,将代理的实现类传入自定义Handler对象中。自定义Handler需要实现invoke方法,该方法可以使用java反射调用实现类的实现的方法,同时当然可以实现其他功能,例如在调用实现类方法前后加入Log,实现安全认证等。而Proxy类根据Handler和需要代理的接口动态生成一个接口实现类的对象。当用户调用这个动态生成的实现类时,实际上是调用了自定义Handler的invoke方法。

【直流微电网】径向直流微电网的状态空间建模与线性化:一种耦合DC-DC变换器状态空间平均模型的方法 (Matlab代码实现)内容概要:本文介绍了径向直流微电网的状态空间建模与线性化方法,重点提出了一种基于耦合DC-DC变换器状态空间平均模型的建模策略。该方法通过对系统中多个相互耦合的DC-DC变换器进行统一建模,构建出整个微电网的集中状态空间模型,并在此基础上实施线性化处理,便于后续的小信号分析与稳定性研究。文中详细阐述了建模过程中的关键步骤,包括电路拓扑分析、状态变量选取、平均化处理以及雅可比矩阵的推导,最终通过Matlab代码实现模型仿真验证,展示了该方法在动态响应分析和控制器设计中的有效性。; 适合人群:具备电力电子、自动控制理论基础,熟悉Matlab/Simulink仿真工具,从事微电网、新能源系统建模与控制研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握直流微电网中多变换器系统的统一建模方法;②理解状态空间平均法在非线性电力电子系统中的应用;③实现系统线性化并用于稳定性分析与控制器设计;④通过Matlab代码复现和扩展模型,服务于科研仿真与教学实践。; 阅读建议:建议读者结合Matlab代码逐步理解建模流程,重点关注状态变量的选择与平均化处理的数学推导,同时可尝试修改系统参数或拓扑结构以加深对模型通用性和适应性的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值