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

静态代理的有两种方式: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);
    }
}


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

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

原文地址:http://te-amo.site/user/article/info/ARTICLE20180210042609451

发布了32 篇原创文章 · 获赞 2 · 访问量 4679
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章