輕松掌握J(rèn)ava代理模式
定義:為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問(wèn)。在某些情況下,一個(gè)對(duì)象不適合或者不能直接引用另一個(gè)對(duì)象,而代理對(duì)象可以在客戶端和目標(biāo)對(duì)象之間起到中介的作用。
特點(diǎn):
1、真實(shí)的角色就是實(shí)現(xiàn)實(shí)際的業(yè)務(wù)邏輯,不用關(guān)心其他非本職責(zé)的事務(wù),通過(guò)后期的代理完成一件完成事務(wù),附帶的結(jié)果就是編程簡(jiǎn)潔清晰。
2、代理對(duì)象可以在客戶端和目標(biāo)對(duì)象之間起到中介的作用,這樣起到了中介的作用和保護(hù)了目標(biāo)對(duì)象的作用。
3、擴(kuò)展性高
企業(yè)級(jí)開(kāi)發(fā)和常用框架中的應(yīng)用:最著名的就是spring的aop,還有spring的bean的創(chuàng)建其實(shí)也用到了代理
代理模式分為了動(dòng)態(tài)代理和靜態(tài)代理,動(dòng)態(tài)代理是開(kāi)發(fā)中應(yīng)用的特別多。
靜態(tài)代理:
/**
* 以買(mǎ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)代理:
/**
* 以買(mǎ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();
}
}
以上就是本文的全部?jī)?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簡(jiǎn)單實(shí)現(xiàn)動(dòng)態(tài)代理模式過(guò)程解析
- 淺談JAVA設(shè)計(jì)模式之代理模式
- Java設(shè)計(jì)模式之代理模式詳解
相關(guān)文章
Java map.getOrDefault()方法的用法詳解
這篇文章主要介紹了Java map.getOrDefault()方法的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
Maven工程搭建spring boot+spring mvc+JPA的示例
本篇文章主要介紹了Maven工程搭建spring boot+spring mvc+JPA的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧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-01
Java動(dòng)態(tài)代理實(shí)現(xiàn)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
動(dòng)態(tài)代理作為代理模式的一種擴(kuò)展形式,廣泛應(yīng)用于框架(尤其是基于AOP的框架)的設(shè)計(jì)與開(kāi)發(fā),本文將通過(guò)實(shí)例來(lái)講解Java動(dòng)態(tài)代理的實(shí)現(xiàn)過(guò)程2017-08-08
JAVA MyBatis入門(mén)學(xué)習(xí)過(guò)程記錄
MyBatis是一個(gè)支持普通SQL查詢,存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架。這篇文章主要介紹了mybatis框架入門(mén)學(xué)習(xí)教程,需要的朋友可以參考下,希望能幫助到你2021-06-06

