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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章