詳解Java中的靜態代理模式

靜態代理模式

代理模式

代理人可以替受代理的人完成一些工作,比如:學校與學生之間的關系來說,學生就好比被被代理類,學生隻需要負責上課,寫作業,考試等事務,而類似於課程,考試,任課教師的安排等都不需要學生去做,可以交給其學校完成。

靜態代理模式的實現要求

提供兩個真實的具體的類,代理類與被代理類;

兩個類同時實現同一個接口,接口中定義多個抽象方法(提取代理類,被代理各自的行為任務)

代理類一定要有被代理對象的引用,為瞭能在代理類中調用被代理類的重寫接口中的方法

舉例

接口—–包含代理人和被代理人需要進行的事務:

package static_assist;

public interface affair {
    //考試
    void testing();
    //考試安排
    void test_schedule();
    //上課
    void classing();
    //課程安排
    void classing_schedule();
    //任課教師安排
    void progamm_teacher();
}

代理人——學校:實現affair接口,並且重寫自己能夠完成的事務的方法,並產生被代理對象的引用,以便於調用被代理類中重寫的方法:

代理人不能完成的事務,需要使用被代理人的引用去調用該事務的方法

package static_assist;

public class school implements affair {
    private student student;//被代理類的引用

    public school(student student) {
        this.student=student;
    }

    public school() {
    }

    @Override
    public void testing() {
        student.testing();
    }

    @Override
    public void test_schedule() {
        System.out.println("學校進行考試安排");
    }

    @Override
    public void classing() {
        student.classing();
    }

    @Override
    public void classing_schedule() {
        System.out.println("學校進行上課安排");
    }

    @Override
    public void progamm_teacher() {
        System.out.println("學校進行任課教師安排");
    }
}

被代理人—-學生:實現affair接口,並且隻需要重寫自己能夠完成的事務的方法即可

package static_assist;

public class student implements affair {
    @Override
    public void testing() {
        System.out.println("學生進行考試");
    }
    @Override
    public void test_schedule() {

    }

    @Override
    public void classing() {
        System.out.println("學生去上課");
    }

    @Override
    public void classing_schedule() {

    }

    @Override
    public void progamm_teacher() {

    }
}

測試類:

package static_assist;

public class Test {
    public static void main(String[] args) {
        school school=new school(new student());//產生代理類和被代理類的實例化對象,將被代理類的實例化對象傳遞到代理類

//通過代理類實例化對象調用各個事務方法
        school.classing_schedule();
        school.progamm_teacher();
        school.classing();
        school.test_schedule();
        school.testing();
    }
}

輸出:

學校進行上課安排
學校進行任課教師安排
學生去上課
學校進行考試安排
學生進行考試

到此這篇關於詳解Java中的靜態代理模式的文章就介紹到這瞭,更多相關Java靜態代理模式內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: