輕松掌握J(rèn)ava代理模式
定義:為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問。在某些情況下,一個(gè)對(duì)象不適合或者不能直接引用另一個(gè)對(duì)象,而代理對(duì)象可以在客戶端和目標(biāo)對(duì)象之間起到中介的作用。
特點(diǎn):
1、真實(shí)的角色就是實(shí)現(xiàn)實(shí)際的業(yè)務(wù)邏輯,不用關(guān)心其他非本職責(zé)的事務(wù),通過后期的代理完成一件完成事務(wù),附帶的結(jié)果就是編程簡潔清晰。
2、代理對(duì)象可以在客戶端和目標(biāo)對(duì)象之間起到中介的作用,這樣起到了中介的作用和保護(hù)了目標(biāo)對(duì)象的作用。
3、擴(kuò)展性高
企業(yè)級(jí)開發(fā)和常用框架中的應(yīng)用:最著名的就是spring的aop,還有spring的bean的創(chuàng)建其實(shí)也用到了代理
代理模式分為了動(dòng)態(tài)代理和靜態(tài)代理,動(dòng)態(tài)代理是開發(fā)中應(yīng)用的特別多。
靜態(tài)代理:
/** * 以買房舉例 */ interface Actions { /** * 選房 */ public void selectHouse(); /** * 看房 */ public void seeHouse(); /** * 入住 */ public void ruzhu(); } class RealRole implements Actions{ public void selectHouse() { System.out.println("用戶自己選房"); } public void seeHouse() { System.out.println("用戶自己看房"); } public void ruzhu() { System.out.println("用戶自己入住"); } } class ProxyRole implements Actions{ private RealRole realRole; public ProxyRole(RealRole realRole) { this.realRole = realRole; } public void selectHouse() { System.out.println("中介選房"); } public void seeHouse() { System.out.println("中介看房"); } @Override public void ruzhu() { realRole.ruzhu(); } } public class Demo { public static void main(String[] args) { RealRole realRole = new RealRole(); ProxyRole proxyRole = new ProxyRole(realRole); proxyRole.selectHouse(); proxyRole.seeHouse(); proxyRole.ruzhu(); } }
動(dòng)態(tài)代理:
/** * 以買房舉例 */ interface Actions { /** * 選房 */ public void selectHouse(); /** * 看房 */ public void seeHouse(); /** * 入住 */ public void ruzhu(); } class RealRole implements Actions{ public void selectHouse() { System.out.println("用戶自己選房"); } public void seeHouse() { System.out.println("用戶自己看房"); } public void ruzhu() { System.out.println("用戶自己入住"); } } class Handler implements InvocationHandler{ private RealRole realRole ; public Handler(RealRole realRole) { this.realRole = realRole; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println(realRole); System.out.println("中介選房,看房"); method.invoke(realRole, args); return null; } } public class Demo { public static void main(String[] args) { RealRole realRole = new RealRole(); Handler handler = new Handler(realRole); Actions proxy = (Actions) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{Actions.class}, handler); proxy.ruzhu(); } }
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java代理模式實(shí)例詳解【靜態(tài)代理與動(dòng)態(tài)代理】
- Java代理模式實(shí)例分析
- 23種設(shè)計(jì)模式(7) java代理模式
- Java代理模式詳細(xì)解析
- 輕松掌握J(rèn)ava代理模式
- java代理模式與動(dòng)態(tài)代理模式詳解
- Java基礎(chǔ)之讓你徹底搞懂代理模式
- Java通俗易懂系列設(shè)計(jì)模式之代理模式
- Java線程創(chuàng)建靜態(tài)代理模式代碼實(shí)例
- Java簡單實(shí)現(xiàn)動(dòng)態(tài)代理模式過程解析
- 淺談JAVA設(shè)計(jì)模式之代理模式
- Java設(shè)計(jì)模式之代理模式詳解
相關(guān)文章
Java map.getOrDefault()方法的用法詳解
這篇文章主要介紹了Java map.getOrDefault()方法的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-12-12Maven工程搭建spring boot+spring mvc+JPA的示例
本篇文章主要介紹了Maven工程搭建spring boot+spring mvc+JPA的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-01-01詳解SpringBoot中@ConditionalOnClass注解的使用
這篇文章主要和大家詳細(xì)介紹一下springboot中@ConditionalOnClass注解的用法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-08-08在Java中使用redisTemplate操作緩存的方法示例
這篇文章主要介紹了在Java中使用redisTemplate操作緩存的方法示例,在Redis中可以存儲(chǔ)String、List、Set、Hash、Zset。感興趣的可以了解一下2019-01-01Java動(dòng)態(tài)代理實(shí)現(xiàn)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
動(dòng)態(tài)代理作為代理模式的一種擴(kuò)展形式,廣泛應(yīng)用于框架(尤其是基于AOP的框架)的設(shè)計(jì)與開發(fā),本文將通過實(shí)例來講解Java動(dòng)態(tài)代理的實(shí)現(xiàn)過程2017-08-08