Java的代理模式(一)静态代理

来源:互联网 发布:java框架有必要学吗 编辑:程序博客网 时间:2024/05/16 17:17

静态代理的有两种方式:1.继承被代理类;2.实现被代理类的接口


方式一:继承被代理类实现代理模式


类图如下(画图软件画的,画的不好,能看懂就好)


接口代码如下(Girl.java):


public interface Girl {    boolean date(int money);}


被代理类(GirlZhang.java):


//实现Girl接口public class GirlZhang implements Girl {    public boolean date(int money) {        if(money>100000){            System.out.println("可以约会!");            return true;        }        System.out.println("太穷不约会!");        return false;    }}


代理类(Proxy1.java):


//继承GirlZhang类,重写父类方法实现代理public class Proxy1 extends GirlZhang {    public boolean date(int money) {        doSomethingBefor();        boolean flag = super.date(money);        doSomethingAfter();        return flag;    }    private void doSomethingAfter() {        System.out.println("约会完,代理人干一些事情");    }    private void doSomethingBefor() {        System.out.println("约会前,代理人准备工作");    }}


主方法测试(Main.java):


public class Main {    public static void main(String[] args){        Proxy1 proxy1 = new Proxy1();        proxy1.date(1000000);    }}


这种继承理类实现的静态代理,有一个很明显得缺陷,就是如果要的继续给被代理类添加拓展的新的功能,就需要继续继承上一个代理类,这样拓展次数过多时,继承次数就太

多,不利于管理,性能也不好。


方式二:实现被代理类的接口


类图如下:



接口和被代理类代码同第一种方式,这里不再赘述。


代理类(Proxy2.java):


//实现Girl接口public class Proxy2 implements Girl{    private Girl girl;    public Proxy2(Girl girl){        this.girl=girl;    }    public boolean date(int money) {        doSomethingBefor();        boolean flag = girl.date(money);        doSomethingAfter();        return false;    }    private void doSomethingAfter() {        System.out.println("约会完,代理人干一些事情");    }    private void doSomethingBefor() {        System.out.println("约会前,代理人准备工作");    }}


主方法测试(Main.java):


public class Main {    public static void main(String[] args){        Proxy2 proxy2 = new Proxy2(new GirlZhang());        proxy2.date(1000000);    }}


使用实现接口的方法实现静态代理,对比使用继承来实现代理,要好一些,不用多重继承,但是如果要拓展功能,仍然需要建立许多的实现类,来添加新的功能,这对编码也带

了一些不便。所以要更好的处理这些东西,就需要使用动态代理了。

原创粉丝点击