輕松掌握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é)果就是編程簡(jiǎn)潔清晰。
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();
}
}
以上就是本文的全部?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)代理模式過程解析
- 淺談JAVA設(shè)計(jì)模式之代理模式
- Java設(shè)計(jì)模式之代理模式詳解
相關(guān)文章
IDEA下載并大學(xué)生edu郵箱認(rèn)證免費(fèi)使用教程(圖文)
這篇文章主要介紹了IDEA下載并大學(xué)生edu郵箱認(rèn)證免費(fèi)使用教程(圖文),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
解決spring boot hibernate 懶加載的問題
這篇文章主要介紹了解決spring boot hibernate 懶加載的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-10-10
詳解Java中synchronized關(guān)鍵字的死鎖和內(nèi)存占用問題
Java的synchronized關(guān)鍵字用來(lái)進(jìn)行線程同步操作,然而這在使用中經(jīng)常會(huì)遇到一些問題,這里我們就來(lái)詳解Java中synchronized關(guān)鍵字的死鎖和內(nèi)存占用問題:2016-06-06
Java虛擬機(jī)類加載器之雙親委派機(jī)制模型案例
這篇文章主要介紹了Java虛擬機(jī)類加載器之雙親委派機(jī)制模型案例,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)原理解析
這篇文章主要介紹了JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
Java中HashTable和HashMap的區(qū)別_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
HashTable和HashMap主要的區(qū)別有:線程安全性,同步(synchronization),以及速度。接下來(lái)通過本文給大家簡(jiǎn)單介紹下HashTable和HashMap的區(qū)別,需要的的朋友參考下吧2017-04-04

