代理模式使用了多态,主要是便于扩展,代理类和被代理类使用的是同一个接口。
代码演示,先创建一个接口Women。
Women.java
package proxy; public interface Women { public void eat(); public void paly(); }
创建两个要被代理的类,实现Women接口。
Juli.java
package proxy; public class Juli implements Women{ @Override public void eat() { System.out.println("i'm Juli,i love eat banana"); } @Override public void paly() { System.out.println("i'm Juli,i love swimming"); } }
Lily.java
package proxy; public class Lily implements Women{ @Override public void eat() { System.out.println("i'm Lily,i love eat apple"); } @Override public void paly() { System.out.println("i'm Lily, i love play football"); } }
创建一个代理类Proxy:
proxy.java
package proxy; public class Proxy implements Women { private Women women; public Proxy() { this.women = new Lily();//默认是Lily } public Proxy(Women women){ this.women=women; } @Override public void eat() { this.women.eat(); } @Override public void paly() { this.women.paly(); } }
Test:
package proxy; public class Test { public static void main(String[] args) { Proxy p; p=new Proxy(); p.eat(); p.paly(); Juli j=new Juli(); p=new Proxy(j); j.eat(); j.paly(); } }
测试结果:
i'm Lily,i love eat apple i'm Lily, i love play football i'm Juli,i love eat banana i'm Juli,i love swimming
主要好处在于,以后要添加新的被代理类不需要改动原来的代理类代码,只需要实现接口就行,解耦合。