代理角色java設(shè)計(jì)模式之靜態(tài)代理詳細(xì)介紹
Java動(dòng)態(tài)代理模式
代理:一個(gè)角色代表別一個(gè)角色來(lái)實(shí)現(xiàn)某些特定的能功。
比如:生產(chǎn)商,中間商,客戶(hù)這三者這間的關(guān)系
客戶(hù)買(mǎi)產(chǎn)品不并直接與生產(chǎn)商打交道,也用不曉得產(chǎn)品是如何生產(chǎn)的,客戶(hù)只與中間商打交道,而中間商便可以對(duì)產(chǎn)品行進(jìn)一些包裝,供提一些售后的服務(wù)。
代理模式有三個(gè)角色: 1. 抽象主題角色 2. 代理主題角色 3. 際實(shí)被代理角色
面下我們來(lái)個(gè)一個(gè)靜態(tài)代理的現(xiàn)實(shí)。
我以一個(gè)坦克為例。
抽象主題角色:Moveable
package com.gjy.proxy;
public interface Moveable {
void move();
}
代理主題角色:TanktimeProxy
package com.gjy.proxy;
public class TanktimeProxy implements Moveable{
private Moveable t;
public TanktimeProxy(Moveable t) {
super();
this.t = t;
}
@Override
public void move() {
long time1 = System.currentTimeMillis();
System.out.println("time1="+time1);
t.move();
long time2 = System.currentTimeMillis();
System.out.println("time2="+time2);
System.out.println("運(yùn)行間時(shí)為:"+(time2-time1));
}
}
際實(shí)被代理對(duì)象:Tank
package com.gjy.proxy;
public class Tank implements Moveable{
@Override
public void move() {
System.out.println("TanK moving........");
}
}
測(cè)試:
package com.gjy.proxy;
public class TestTank {
public static void main(String[] args) {
Tank t = new Tank();
Moveable move = new TanktimeProxy(t);
move.move();
}
}
面下我想在TanK的move()方法前后加上日記:
我必須再寫(xiě)一個(gè)類(lèi)來(lái)現(xiàn)實(shí)這一能功:
package com.gjy.proxy;
public class TanklogProxy implements Moveable{
private Moveable t;
public TanklogProxy(Moveable t) {
super();
this.t = t;
}
@Override
public void move() {
System.out.println("start move........");
t.move();
System.out.println("end move......");
}
}
測(cè)試:
package com.gjy.proxy;
public class TestTank {
public static void main(String[] args) {
Tank t = new Tank();
Moveable move = new TanktimeProxy(t);
Moveable movet = new TanklogProxy(move);
movet.move();
}
}
這樣我通過(guò)代理在Tank的move()方法前后入加了日記和間時(shí)統(tǒng)計(jì)的能功,由于TanktimeProxy,TanklogProxy都現(xiàn)實(shí)了Moveable口接,所以TanklogProxy可以代理TanktimeProxy,反過(guò)來(lái)也可以,它們對(duì)Tank的代理次序是可以交換的。
如果我想在Tank的move()方法用調(diào)的前后入加更多的能功,是否是要寫(xiě)更多的代理主題角色,這子樣會(huì)使得碼代過(guò)于癡肥,不易于維護(hù),那有沒(méi)有什么方法可以處理呢,案答是可以的,我們可以動(dòng)態(tài)的來(lái)成生代理主題角色,來(lái)代理全部的被代理對(duì)象,這就是動(dòng)態(tài)代理。
文章結(jié)束給大家分享下程序員的一些笑話語(yǔ)錄: IBM和波音777
波音777是有史以來(lái)第一架完全在電腦虛擬現(xiàn)實(shí)中設(shè)計(jì)制造的飛機(jī),所用的設(shè)備完全由IBM公司所提供。試飛前,波音公司的總裁非常熱情的邀請(qǐng)IBM的技術(shù)主管去參加試飛,可那位主管卻說(shuō)道:“啊,非常榮幸,可惜那天是我妻子的生日,So..”..
波音公司的總載一聽(tīng)就生氣了:“膽小鬼,我還沒(méi)告訴你試飛的日期呢!”
- 淺談Java代理(jdk靜態(tài)代理、動(dòng)態(tài)代理和cglib動(dòng)態(tài)代理)
- Java靜態(tài)代理和動(dòng)態(tài)代理總結(jié)
- java 靜態(tài)代理 動(dòng)態(tài)代理深入學(xué)習(xí)
- JAVA 靜態(tài)代理模式詳解及實(shí)例應(yīng)用
- 深入解析java中的靜態(tài)代理與動(dòng)態(tài)代理
- java設(shè)計(jì)模式—靜態(tài)代理模式(聚合與繼承方式對(duì)比)
- JAVA中的靜態(tài)代理、動(dòng)態(tài)代理以及CGLIB動(dòng)態(tài)代理總結(jié)
- Java設(shè)計(jì)模式之靜態(tài)代理模式實(shí)例分析
- Java代理模式實(shí)例詳解【靜態(tài)代理與動(dòng)態(tài)代理】
- Java代理深入講解之靜態(tài)代理
相關(guān)文章
LibrarySystem圖書(shū)管理系統(tǒng)開(kāi)發(fā)(一)
這篇文章主要為大家詳細(xì)介紹了LibrarySystem圖書(shū)管理系統(tǒng)開(kāi)發(fā),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
Java JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)(Run-Time Data Areas)
運(yùn)行時(shí)數(shù)據(jù)區(qū),是java虛擬機(jī)定義的在程序執(zhí)行期間使用的各種運(yùn)行時(shí)的數(shù)據(jù)區(qū),通過(guò)JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)圖例給大家展示的很詳細(xì),對(duì)JVM 運(yùn)行時(shí)數(shù)據(jù)區(qū)相關(guān)知識(shí)感興趣的朋友跟隨小編一起看看吧2021-06-06
java實(shí)現(xiàn)簡(jiǎn)單的俄羅斯方塊
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單的俄羅斯方塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
java實(shí)現(xiàn)選中刪除功能的實(shí)例代碼
這篇文章主要介紹了java實(shí)現(xiàn)選中刪除功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
Ubuntu 15下安裝Eclipse經(jīng)驗(yàn)分享
這篇文章主要為大家分享了Ubuntu 15下安裝Eclipse經(jīng)驗(yàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
解決idea中javaweb的mysql8.0.15配置問(wèn)題
這篇文章主要介紹了idea中javaweb的mysql8.0.15配置問(wèn)題 ,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05
idea使用外置tomcat配置springboot詳細(xì)步驟
昨天小編遇到一個(gè)問(wèn)題使用springboot自帶的tomcat啟動(dòng)沒(méi)有任何問(wèn)題,不知道idea使用外置tomcat配置springboot該如何設(shè)置的,今天小編給大家分享一篇教程幫助大家解決這個(gè)問(wèn)題2021-07-07

