輕松掌握Java代理模式
定義:為其他對象提供一種代理以控制對這個對象的訪問。在某些情況下,一個對象不適合或者不能直接引用另一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。
特點:
1、真實的角色就是實現(xiàn)實際的業(yè)務(wù)邏輯,不用關(guān)心其他非本職責的事務(wù),通過后期的代理完成一件完成事務(wù),附帶的結(jié)果就是編程簡潔清晰。
2、代理對象可以在客戶端和目標對象之間起到中介的作用,這樣起到了中介的作用和保護了目標對象的作用。
3、擴展性高
企業(yè)級開發(fā)和常用框架中的應(yīng)用:最著名的就是spring的aop,還有spring的bean的創(chuàng)建其實也用到了代理
代理模式分為了動態(tài)代理和靜態(tài)代理,動態(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();
}
}
動態(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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java map.getOrDefault()方法的用法詳解
這篇文章主要介紹了Java map.getOrDefault()方法的用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
Maven工程搭建spring boot+spring mvc+JPA的示例
本篇文章主要介紹了Maven工程搭建spring boot+spring mvc+JPA的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01
詳解SpringBoot中@ConditionalOnClass注解的使用
這篇文章主要和大家詳細介紹一下springboot中@ConditionalOnClass注解的用法,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2022-08-08
在Java中使用redisTemplate操作緩存的方法示例
這篇文章主要介紹了在Java中使用redisTemplate操作緩存的方法示例,在Redis中可以存儲String、List、Set、Hash、Zset。感興趣的可以了解一下2019-01-01
Java動態(tài)代理實現(xiàn)_動力節(jié)點Java學院整理
動態(tài)代理作為代理模式的一種擴展形式,廣泛應(yīng)用于框架(尤其是基于AOP的框架)的設(shè)計與開發(fā),本文將通過實例來講解Java動態(tài)代理的實現(xiàn)過程2017-08-08

