电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

詳解 Java靜態代理

瀏覽:14日期:2022-08-26 18:11:59

今天要介紹的是一個Java中一個很重要的概念——代理。

什么是代理?聯系生活想想看,代理似乎并不陌生,最形象的代表便是經紀人,明星一般都有經紀人,經紀人作為中間人,負責代理明星的相關事宜,比如說,有人要請明星去唱歌表演,一般不會直接跟明星聯系,而是聯系他的經紀人,他的經紀人來負責安排行程,而真正唱歌表演的還是明星本人,經紀人僅僅作為一個附加物存在。

在Java中,代理也是這樣的概念,來看個栗子:

先來創建一個明星類Stars:

public class Stars implements IStars{ private String name; public Stars(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void sing(){ System.out.println(getName() + ' 唱了一首歌.'); } public void dance(){ System.out.println(getName() + ' 跳了一支舞.'); }}

這是相應的接口:

public interface IStars { void sing(); void dance();}

現在創建一個代理類:

public class StarsProxy implements IStars{ //保存接收的代理對象 private IStars stars; public StarsProxy(IStars stars){ this.stars = stars; } @Override public void sing() { System.out.println('我是代理,我收到了唱歌請求。'); stars.sing(); System.out.println('唱歌完畢'); } @Override public void dance() { System.out.println('我是代理,我收到了跳舞請求。'); stars.dance(); System.out.println('跳舞完畢'); }}

來測試一下:

public class Test { public static void main(String[] args){ //創建目標對象 IStars stars = new Stars('Frank');//代理對象,把目標傳給代理對象,建立關系 IStars starsProxy = new StarsProxy(stars); starsProxy.sing(); starsProxy.dance(); }}

運行結果:

我是代理,我收到了唱歌請求。Frank 唱了一首歌.唱歌完畢我是代理,我收到了跳舞請求。Frank 跳了一支舞.跳舞完畢

我們可以看到,實際上代理類只是保存了Stars類的一個實例,因為實現的是相同的接口,StarsProxy類必須實現需要代理的Stars類的方法,比如這里的dance和sing,而這個接口正是鏈接兩者的關鍵,因為實現接口就代表必定存在接口中聲明的方法。

那么,為什么要使用代理呢?

其實主要目的是為了擴展原有類的功能,想想看,如果那個Stars類不是你寫的,而是別人寫的,現在要將原有的sing或者dance方法進行改造,比如需要統計唱歌和跳舞的次數,次數大于10則不進行該操作直接返回,這時候用代理就很好實現了,來把代理類稍作修改:

public class StarsProxy implements IStars{ //保存接收的代理對象 private IStars stars; //保存sing和dance的次數 private int num; public StarsProxy(IStars stars){ this.stars = stars; } @Override public void sing() { if (!ifWork()) { return; } System.out.println('我是代理,我收到了唱歌請求。'); stars.sing(); System.out.println('唱歌完畢'); } @Override public void dance() { if (!ifWork()) { return; } System.out.println('我是代理,我收到了跳舞請求。'); stars.dance(); System.out.println('跳舞完畢'); } /** * 是否繼續工作 * @return 是返回true,否則返回false */ private boolean ifWork(){ if (num > 3){ System.out.println('明星今天已經很累了,明天再來吧。'); return false; }else { num++; return true; } }}

修改一下測試類:

public class Test { public static void main(String[] args){ //創建目標對象 Stars stars = new Stars(); stars.setName('Frank'); //代理對象,把目標傳給代理對象,建立關系 StarsProxy starsProxy = new StarsProxy(stars); for (int i = 0;i < 5; i++){ starsProxy.sing(); } }}

測試結果如下:

我是代理,我收到了唱歌請求。Frank 唱了一首歌.唱歌完畢我是代理,我收到了唱歌請求。Frank 唱了一首歌.唱歌完畢我是代理,我收到了唱歌請求。Frank 唱了一首歌.唱歌完畢我是代理,我收到了唱歌請求。Frank 唱了一首歌.唱歌完畢明星今天已經很累了,明天再來吧。

看,簡單粗暴。

但其實并沒有多少干貨,這里僅僅是一種代理的思想,用這種思想可以比較方便的在不直接修改原有類的前提下對原有類的方法進行擴展。為某個對象提供一個代理,以控制對這個對象的訪問。 代理類和委托類有共同的父類或父接口,這樣在任何使用委托類對象的地方都可以用代理對象替代。代理類負責請求的預處理、過濾、將請求分派給委托類處理、以及委托類執行完請求后的后續處理。可以使業務類只關注業務邏輯本身,保證了業務類的重用性,這也是代理的共有優點。

但是限制也顯而易見:

1.代理類需要跟被代理類實現相同的接口,這樣才能一起向上轉型后實現多態。

2.當被代理的類需要進行的擴展增多時,管理會變得更加困難,之后對被代理類的修改,需要同時修改代理類,增加了修改成本。

所以不要為了使用而使用,應用在合適的場景才能發揮它真正的作用。

至此,本篇講解完畢,歡迎大家繼續關注!

以上就是詳解 Java靜態代理的詳細內容,更多關于Java靜態代理的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | 春腾云财 - 为企业提供专业财税咨询、代理记账服务 | 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 | 北京公司注册_代理记账_代办商标注册工商执照-企力宝 | 可程式恒温恒湿试验箱|恒温恒湿箱|恒温恒湿试验箱|恒温恒湿老化试验箱|高低温试验箱价格报价-广东德瑞检测设备有限公司 | 牛皮纸|牛卡纸|进口牛皮纸|食品级牛皮纸|牛皮纸厂家-伽立实业 | 深圳办公室装修-写字楼装修设计-深圳标榜装饰公司 | 成都办公室装修-办公室设计-写字楼装修设计-厂房装修-四川和信建筑装饰工程有限公司 | 炒货机-炒菜机-炒酱机-炒米机@霍氏机械 | 北京成考网-北京成人高考网 | 电子海图系统-电梯检验系统-智慧供热系统开发-商品房预售资金监管系统 | 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | 石家庄装修设计_室内家装设计_别墅装饰装修公司-石家庄金舍装饰官网 | 冻干机(冷冻干燥机)_小型|实验型|食品真空冷冻干燥机-松源 | 北京印刷厂_北京印刷_北京印刷公司_北京印刷厂家_北京东爵盛世印刷有限公司 | 齿轮减速电机一体机_蜗轮蜗杆减速马达-德国BOSERL齿轮减速机带电机生产厂家 | 成都中天自动化控制技术有限公司 | 多功能真空滤油机_润滑油全自动滤油机_高效真空滤油机价格-重庆润华通驰 | 安徽合肥格力空调专卖店_格力中央空调_格力空调总经销公司代理-皖格制冷设备 | 聚天冬氨酸,亚氨基二琥珀酸四钠,PASP,IDS - 远联化工 | Jaeaiot捷易科技-英伟达AI显卡模组/GPU整机服务器供应商 | 苏州柯瑞德货架-仓库自动化改造解决方案 | 钢丝绳探伤仪-钢丝绳检测仪-钢丝绳探伤设备-洛阳泰斯特探伤技术有限公司 | EPK超声波测厚仪,德国EPK测厚仪维修-上海树信仪器仪表有限公司 | 医学模型生产厂家-显微手术模拟训练器-仿真手术模拟训练系统-北京医教科技 | 首页_中夏易经起名网| uv固化机-丝印uv机-工业烤箱-五金蚀刻机-分拣输送机 - 保定市丰辉机械设备制造有限公司 | 盘扣式脚手架-附着式升降脚手架-移动脚手架,专ye承包服务商 - 苏州安踏脚手架工程有限公司 | 湖南自考_湖南自学考试 | 123悬赏网_发布悬赏任务_广告任务平台| 无线讲解器-导游讲解器-自助讲解器-分区讲解系统 品牌生产厂家[鹰米讲解-合肥市徽马信息科技有限公司] | 户外健身路径_小区健身器材_室外健身器材厂家_价格-浩然体育 | 石家庄小程序开发_小程序开发公司_APP开发_网站制作-石家庄乘航网络科技有限公司 | 专业的新乡振动筛厂家-振动筛品质保障-环保振动筛价格—新乡市德科筛分机械有限公司 | 工业雾炮机_超细雾炮_远程抑尘射雾器-世纪润德环保设备 | 东莞市踏板石餐饮管理有限公司_正宗桂林米粉_正宗桂林米粉加盟_桂林米粉加盟费-东莞市棒子桂林米粉 | 贵州科比特-防雷公司厂家提供贵州防雷工程,防雷检测,防雷接地,防雷设备价格,防雷产品报价服务-贵州防雷检测公司 | 深圳活动策划公司|庆典策划|专业公关活动策划|深圳艺典文化传媒 重庆中专|职高|技校招生-重庆中专招生网 | 中药二氧化硫测定仪,食品二氧化硫测定仪|俊腾百科 | 耐磨陶瓷,耐磨陶瓷管道_厂家-淄博拓创陶瓷科技 | 净化板-洁净板-净化板价格-净化板生产厂家-山东鸿星新材料科技股份有限公司 |