詳解Java中的靜態(tài)代理模式
靜態(tài)代理模式
代理模式
代理人可以替受代理的人完成一些工作,比如:學(xué)校與學(xué)生之間的關(guān)系來說,學(xué)生就好比被被代理類,學(xué)生只需要負(fù)責(zé)上課,寫作業(yè),考試等事務(wù),而類似于課程,考試,任課教師的安排等都不需要學(xué)生去做,可以交給其學(xué)校完成。
靜態(tài)代理模式的實(shí)現(xiàn)要求
提供兩個(gè)真實(shí)的具體的類,代理類與被代理類;
兩個(gè)類同時(shí)實(shí)現(xiàn)同一個(gè)接口,接口中定義多個(gè)抽象方法(提取代理類,被代理各自的行為任務(wù))
代理類一定要有被代理對(duì)象的引用,為了能在代理類中調(diào)用被代理類的重寫接口中的方法
舉例
接口-----包含代理人和被代理人需要進(jìn)行的事務(wù):
package static_assist; public interface affair { //考試 void testing(); //考試安排 void test_schedule(); //上課 void classing(); //課程安排 void classing_schedule(); //任課教師安排 void progamm_teacher(); }
代理人------學(xué)校:實(shí)現(xiàn)affair接口,并且重寫自己能夠完成的事務(wù)的方法,并產(chǎn)生被代理對(duì)象的引用,以便于調(diào)用被代理類中重寫的方法:
代理人不能完成的事務(wù),需要使用被代理人的引用去調(diào)用該事務(wù)的方法
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("學(xué)校進(jìn)行考試安排"); } @Override public void classing() { student.classing(); } @Override public void classing_schedule() { System.out.println("學(xué)校進(jìn)行上課安排"); } @Override public void progamm_teacher() { System.out.println("學(xué)校進(jìn)行任課教師安排"); } }
被代理人----學(xué)生:實(shí)現(xiàn)affair接口,并且只需要重寫自己能夠完成的事務(wù)的方法即可
package static_assist; public class student implements affair { @Override public void testing() { System.out.println("學(xué)生進(jìn)行考試"); } @Override public void test_schedule() { } @Override public void classing() { System.out.println("學(xué)生去上課"); } @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());//產(chǎn)生代理類和被代理類的實(shí)例化對(duì)象,將被代理類的實(shí)例化對(duì)象傳遞到代理類 //通過代理類實(shí)例化對(duì)象調(diào)用各個(gè)事務(wù)方法 school.classing_schedule(); school.progamm_teacher(); school.classing(); school.test_schedule(); school.testing(); } }
輸出:
學(xué)校進(jìn)行上課安排
學(xué)校進(jìn)行任課教師安排
學(xué)生去上課
學(xué)校進(jìn)行考試安排
學(xué)生進(jìn)行考試
到此這篇關(guān)于詳解Java中的靜態(tài)代理模式的文章就介紹到這了,更多相關(guān)Java靜態(tài)代理模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java使用Hex編碼解碼實(shí)現(xiàn)Aes加密解密功能示例
這篇文章主要介紹了java使用Hex編碼解碼實(shí)現(xiàn)Aes加密解密功能,結(jié)合完整實(shí)例形式分析了Aes加密解密功能的定義與使用方法,需要的朋友可以參考下2017-01-01SpringBoot登錄、退出、獲取用戶信息的session處理方案
這篇文章主要介紹了SpringBoot登錄、退出、獲取用戶信息的session處理,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08SpringBoot中使用Servlet三大組件的方法(Servlet、Filter、Listener)
這篇文章主要介紹了SpringBoot中使用Servlet三大組件的方法(Servlet、Filter、Listener),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01Spring Boot 定義系統(tǒng)啟動(dòng)任務(wù)的多種方式
這篇文章主要介紹了Spring Boot 定義系統(tǒng)啟動(dòng)任務(wù)的多種方式,看看你都會(huì)哪幾種 ,感興趣的朋友跟隨小編一起看看吧2019-04-04從零開始在Centos7上部署SpringBoot項(xiàng)目
本文主要介紹了從零開始在Centos7上部署SpringBoot項(xiàng)目,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04