Java中的静态代理和动态代理

欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

  1. 代理模式主要有两种:静态代理和动态代理

  2. 静态代理:

  比如要在输出“HelloWorld”前打印一个字符串“Welcome”

  A:先定义一个接口类

  Java代码

  package ttitfly.proxy;

  public interface HelloWorld {

  public void print();

  // public void say();

  }

  package ttitfly.proxy;

  public interface HelloWorld {

  public void print();

  // public void say();

  }

  B: 定义一个该接口的实现类

  Java代码

  package ttitfly.proxy;

  public class HelloWorldImpl implements HelloWorld{

  public void print(){

  System.out.println(“HelloWorld”);

  }

  // public void say(){

  // System.out.println(“Say Hello!”);

  // }

  }

  package ttitfly.proxy;

  public class HelloWorldImpl implements HelloWorld{

  public void print(){

  System.out.println(“HelloWorld”);

  }

  // public void say(){

  // System.out.println(“Say Hello!”);

  // }

  }

  C:定义一个静态代理类

  Java代码

  package ttitfly.proxy;

  public class StaticProxy implements HelloWorld{

  public HelloWorld helloWorld ;

  public StaticProxy(HelloWorld helloWorld){

  this.helloWorld = helloWorld;

  }

  public void print(){

  System.out.println(“Welcome”);

  //相当于回调

  helloWorld.print();

  }

  // public void say(){

  // //相当于回调

  // helloWorld.say();

  // }

  }

  package ttitfly.proxy;

  public class StaticProxy implements HelloWorld{

  public HelloWorld helloWorld ;

  public StaticProxy(HelloWorld helloWorld){

  this.helloWorld = helloWorld;

  }

  public void print(){

  System.out.println(“Welcome”);

  //相当于回调

  helloWorld.print();

  }

  // public void say(){

  // //相当于回调

  // helloWorld.say();

  // }

  }

  D: 一个测试类:

  Java代码

  package ttitfly.proxy;

  public class TestStaticProxy {

  public static void main(String[] args){

  HelloWorld helloWorld = new HelloWorldImpl();

  StaticProxy staticProxy = new StaticProxy(helloWorld);

  staticProxy.print();

  // staticProxy.say();

  }

  }

  package ttitfly.proxy;

  public class TestStaticProxy {

  public static void main(String[] args){

  HelloWorld helloWorld = new HelloWorldImpl();

  StaticProxy staticProxy = new StaticProxy(helloWorld);

  staticProxy.print();

  // staticProxy.say();

  }

  }

  可以看出静态代理类有一个很不爽的缺点:当如果接口加一个方法(把上面所有的代码的注释给去掉),所有的实现类和代理类里都需要做个实现。这就增加了代码的复杂度。动态代理就可以避免这个缺点。

[1][2]

所有的赏赐都只是被用来奖励工作成果的。

Java中的静态代理和动态代理

相关文章:

你感兴趣的文章:

标签云: