導航:首頁 > 編程語言 > java委託模式

java委託模式

發布時間:2022-07-08 19:53:21

java 如何理解classloader

有好多東西都是網路上有的,我覺得挺好理解的,如下:

Java程序(class文件)並不是本地的可執行程序。當運行Java程序時,首先運行JVM(Java虛擬機),然後再把Java class載入到JVM里頭運行,負責載入Java class的這部分就叫做Class Loader.
JVM本身包含了一個ClassLoader稱為Bootstrap ClassLoader,和JVM一樣,BootstrapClassLoader是用本地代碼實現的,它負責載入核心JavaClass(即所有java.*開頭的類)。另外JVM還會提供兩個ClassLoader,它們都是用Java語言編寫的,由BootstrapClassLoader載入;其中Extension ClassLoader負責載入擴展的Javaclass(例如所有javax.*開頭的類和存放在JRE的ext目錄下的類),ApplicationClassLoader負責載入應用程序自身的類。 當運行一個程序的時候,JVM啟動,運行bootstrapclassloader,該ClassLoader載入java核心API(ExtClassLoader和AppClassLoader也在此時被載入),然後調用ExtClassLoader載入擴展API,最後AppClassLoader載入CLASSPATH目錄下定義的Class,這就是一個程序最基本的載入流程。

Ⅱ 請教JAVA題目,謝謝

1、Java允許創建不規則數組,即Java多維數組中各行的列數可以不同。 ( 對 )
2、介面和類一樣也可以有繼承關系,而且都只能支持單繼承。 ( 對 )
3、所有類至少有一個構造器,構造器用來初始化類的新對象,構造器與類同名,返回類型只能為void。 ( 錯 )
4、包是按照目錄、子目錄存放的,可以在程序中用package定義包,若沒有package一行,則表示該文件中的類不屬於任何一個包。 ( 錯 )
5、Java對事件的處理是採用委託方式進行的,即將需要進行事件處理的組件委託給指定的事件處理器進行處理。 ( 對 )
6、在異常處理中,若try中的代碼可能產生多種異常則可以對應多個catch語句,若catch中的參數類型有父類子類關系,此時應該將父類放在前面,子類放在後面。 ( 錯 )
7、在實例方法或構造器中,this用來引用當前對象,通過使用this可引用當前對象的任何成員。 ( 錯 )
8、我們可以方便地編寫Java客戶機/伺服器程序,在客戶機/伺服器模式中,客戶機一般通過套接字(Socket)使用伺服器所提供的服務,Socket由兩部分組成:IP地址和埠號。
( 對 )
9、Java的屏幕坐標是以像素為單位,容器的左下角被確定為坐標的起點。 ( 錯 )
10、Java程序里,創建新的類對象用關鍵字new,回收無用的類對象使用關鍵字free。 ( 錯 )

Ⅲ javascritp,事件委託流程

設計模式的委託分三部分吧
首先是代理event proxy
然後是需要執行的流程process

然後是返回結果callback
具體我就以jquery為例
$(...).on('') 這個就是創建代理,至於說是不是onclick這個都另說,因為即使是DOM事件我們也視作是一個事件代理
$(..).fire(callback)這個就是執行你的代理事件,當中的callback就是你的返回結果
這樣你就只需要關心事件本身

Ⅳ Java下委託模式和iOS的區別

委託本質種介面相於C/C++函數指針比函數指針安全C#通用於事件處理與JAVA相比避免使用量粒度匿名類(許微軟使用類似於JAVA匿名類實現委託字面看起事罷誰知道呢) 事件委託由於事件性質決定處理程序邏輯能訪問參數C#處理事件邏輯都包裝委託(種介面)實際處理自定義事件像JAVA用介面實現做C#般沒特別

Ⅳ 自學JAVA

最近論壇上看到好幾個朋友都在問,如何學習 Java的問題,「我已經學習了J2SE,怎麼樣才能轉向J2EE?」,「我看完了Thinking in Java, 可以學習J2EE了么?」。於是就有了寫這篇文章的想法,希望能幫助初學者少走一些彎路。也算是對自己幾年來學習Java的一個總結吧。

在開始之前有必要再討論一下J2ME,J2SE,J2EE這些概念。J2ME,The Micro Edition of the Java 2 Platform。主要用於嵌入式Java,如手機,PDA等等。J2SE,Java 2 Platform,Standard Edition,我們通常所說的JDK(Java Development Kit)包含在此,是J2EE的基礎。J2EE,Java 2 Platform,Enterprise Edition,就是所謂的企業級Java。這些只是從API級別上的劃分,實際上Sun給J2EE的定義是:開發基於組件的多層的企業級應用的規范。也就是為各種不同的技術定義一個Java的規范,使這些不同的技術結合起來,在Java平台上構建強壯的企業級應用。從這一點來看,J2EE這個概念應該是涵蓋J2ME,J2SE的。比如一個典型的J2EE應用,網上商店,它支持web方式下訂單,也支持手機下訂單。顯然必須用到J2SE,J2ME。所以也就不存在所謂的從J2SE轉向J2EE的問題了,只是後者包含的范圍更廣而已。

來看看Sun給出的J2EE 相關技術主要分為幾大塊。

1. Web Service技術

- Java API for XML Processing (JAXP)

- Java API for XML Registries (JAXR)

- Java API for XML-based RPC (JAX-RPC)

- SOAP with Attachments API for Java (SAAJ)

2. 組件模型技術(Component Model Technologies)

- Java Servlet

- JavaServer Pages

- JavaServer Faces

- Enterprise JavaBeans

- Java Message Service

- J2EE Connector Architecture

3. 管理技術(Management Technologies)

- J2EE Deployment Specification

- J2EE Management Specification

- J2EE Client Provisioning

- Java Authorization Contract for Containers

4. 其他相關技術(Other J2EE Technologies)

- JDBC

- Java Data Objects (JDO)

- CORBA (Java IDL and Java RMI-IIOP)

- JavaMail

- Transactions

如此之多的技術難免使初學者無所適從,望而卻步。即使是一位經驗豐富的J2EE開發者,又有幾個人敢說J2EE相關的技術我都熟練掌握了。不過作為一名普通J2EE應用程序的開發者來說,我們只需要重點學習其中的一部分技術就可以了,對於其他部分只要做到心中有數,哪天需要用到了知道跑哪裡去找到資料就行了。以我個人的觀點,下面這些技術是一般J2EE應用開發人員所必須熟練掌握的。Java Server Page,Java Servlet,Enterprise JavaBean,JDBC,Transactions。還有JAXP等XML相關技術,Java Message Service,Java Mail,JDO等等是最好應該掌握的。其他Management Technologies,Connector Architecture等等主要是給容器提供商中間件提供商參考的,應用開發者不需要怎麼關心,等用到了再去學習也不遲。

語言學習篇

首先是J2SE基礎。學習一門新技術,無外乎閱讀和實踐了。而一本好的參考書對於初學者來說顯得格外重要。現在市面上的 Java書籍可以說是鋪天蓋地,質量也是良莠不齊,令初學者無所適從。所以還是先推薦幾本書籍吧。目前對於Java基礎知識,大家一般都比較推薦兩本書<>和<< Core Java? 2, Volume I: Fundamentals >>。第一本書不必多說了,Bruce Eckel的大作,Jolt獲獎書籍。內容比較全面,基本涵蓋了java語言的方方面面。這本書提供了相當豐富的例子,非常有利於對學習內容的了解。另外書中第一部分對於OO基本書籍的介紹,我覺得對於剛接觸OO的人來說幫助會很大。而且此書是Open Source的,可以從作者網上下載http://www.mindview.net/Books/TIJ/而對於習慣於讀中文版的學習者來說,侯捷翻譯的中文版是不錯的選擇。要說這本說的缺點可能就是對於初學者來說厚了一點,這也是一些人並不推薦此書作為初學者學慣用書的原因吧。後面一本<< Core Java? 2, Volume I: Fundamentals >>。目前已經是第七版了,單從它出版的次數來看也可以看出此書受歡迎的程度,這本書特點也是講述比較全面系統,基本上一路啃下來的話Java語言基礎應該算過關了。缺點也是太厚了,有點像參考手冊,前面部分花了不少篇幅講Swing和Applet,可能對初學者不是很有用。還有一些像<< Java in a nutshell>>也是比較不錯的基礎書籍。

學習了基本的語言基礎,別忘了最重要也是最有用的資料還是JDK文檔。從你學習java的第一天開始JDK文檔應該是常備手頭了。如果你碰到問題首先想到的是到論壇上去提問而不是查閱Jdk文檔,那先別繼續往下學習了,學會查JDK文檔先。不誇張的說在我們的初學者論壇中60%的問題是光查一下JDK文檔就能解決問題的。最新JDK Documentation下載地址http://java.sun.com/j2se/1.4.2/download.html(目前最新版是J2SE5 http://java.sun.com/j2se/1.5.0/download.jsp)不能光說不練,同一下載頁面把JDK給下載回來。安裝完後有一點我想提一下,安裝路徑下有一個src.zip(有些jdk版本是src.jar),好東西啊---JDK源代碼,老是有人在論壇上問哪裡有JDK源代碼下載,你說東西就放在你家裡還到處找。有了這個有些問題就需要在論壇上跟人家爭來爭去了,翻開源代碼瞧一下什麼疑問都沒有了。幾個最重要的命令行工具是

javac: 編譯源文件到class文件

java: 運行class

jar: 打包工具。

javadoc: 生成java doc的工具。

對於初學java的人來說,我不推薦使用IDE而直接用文本編輯器,然後用命令行編譯運行。這樣有利於理解CLASSPATH,PATH這些最基本概念。CLASSPATH是初學者比較容易感覺迷惑的地方。現在的IDE太聰明了,給個名字就給你自動生成java source code,自動編譯。可能你運行完了你的第一個Hello World程序,還不知道java和javac是用來做什麼的。至於實際的項目開發,一款合適的IDE還是十分重要的,我們稍後再對java開發工具做一些介紹。

J2EE基礎和Java語言進階

學習完語言基礎,就可以比較自然地轉入J2EE實際技術的學習了。J2EE實在是比較龐雜,而EJB,Servlet,這些核心技術是作為每一個J2EE開發人員所需要掌握的。關於servlet,我比較推薦<>和<>,第一本是Sun推薦的Servlet教材。第二本是當年Amazon最暢銷Java書籍,五星級書籍。這本書機械工業出版社有中文版叫<<與JSP權威指南>>,感覺翻譯得還可以,第二版好像還沒有看到有中文版。兩本書都全面系統地介紹了JSP和Sevlet知識,從web伺服器配置,JSP,Servlet基本編程,標記庫(Tag Lib),過濾器,事件框架都有很好地描述。提供地例子也比較實用。對於EJB學習,比較著名有兩本書,<< Enterprise JavaBeans, 3nd Edition>>和<< Mastering Enterprise Java Beans Third Edition>>,兩位作者Richard Monson,Ed Roman都是屬於業界重量級人物。而Richard Monson本身就是EJB規范專家組成員。對我來說,兩本書難分優劣,第二本書有個好處就是可以免費下載http://www.theserverside.com/books/wiley/masteringEJB/index.tss。

還是那句話,不能光說不練,不過J2EE的練習做起來有一點麻煩,應用伺服器是不可少的,最好還得准備個輕量級的資料庫。下面簡單介紹一下這些工具。

web伺服器(Servlet Container)方面有。

Tomcat: http://jakarta.apache.org/tomcat/

Jetty: http://jetty.mortbay.org/jetty/

應用伺服器常用的有,

Jboss: http://www.jboss.org/procts/index

Weblogic: http://www.bea.com/framework.jsp?CNT=index.htm&FP=/content/procts/server

WebSphere: http://www-128.ibm.com/developerworks/downloads/ws/was/?S_TACT=105AGX28&S_CMP=DLMAIN。

Tomcat,Jetty,Jboss都是Open Source。Weblogic和WebSphere是J2EE伺服器中的老大級人物,價格也不菲。不過對於開發者有免費的試用版下載。

如果單單只是學習Servlet,推薦使用Tomcat,它是Sun官方指定的Servlet,JSP規范的參考實現。對初學者最重要的是它使用比較簡單,自帶文檔比較齊全,使用者眾多,有什麼問題容易在論壇上面得到幫助。如果學習EJB的話,推薦使用Jboss,不僅僅是因為它是Open Source的,主要是配置比較簡單,使用方便。比如說對於連接資料庫,對於常用的MySQL,Oracle,MS SQL等等都提供了Sample Config文件,直接拿過來做些小改動扔到Deploy目錄下就可以用DataSource了,部署J2EE應用也簡單,把整個.ear或者.war扔到deploy下就可以了。唯一不方便的地方是從Jboss3.0開始,它的文檔開始收費了。但是對於一些基本的配置,在網上還是非常容易找到的,畢竟它太流行了。至於Weblogic,也比較容易使用,不過比起Jboss來個頭大了很多,通過強大的管理界面使得一些常用的配置工作變得十分簡單。和Jboss比起來它的文檔就太多了,簡直是有點羅里八嗦,比如要部署一個.ear文件,一般我們也就是直接扔到domain下的applications目錄下就會自動deploy了,但是要看它的文檔可是長篇大論,容易嚇著初學者,以為這又是什麼高深的學問。至於WebSphere,個人不推薦初學者使用,相比前倆個Server比較難使,而且狂吃內存。不過在企業級市場這個傢伙表現不俗,畢竟是出生於IBM這樣的豪門。

資料庫方面,目前常見的主要有PostgreSQL,MySQL,Oracle,MS SQL,DB2等等。前面兩個是開源資料庫,後面幾個基本上壟斷著大部分的資料庫市場。對於初學者用來做做EJB,JDBC的練習,我推薦MySQL,理由還是很簡單,開源軟體不要錢,個頭小使用方面,用戶眾多文檔齊全。下載地址http://www.mysql.com/procts/mysql/。PostgreSQL也可以考慮,不過國內使用者遠不如MySQL多,所以要在論壇上問起問題來就少方便一些了,下載地址http://www.pervasive-postgres.com/downloads/。至於後面那些比較重量級的資料庫,為了做做練習而言就不用考慮了, 咱也花不起這個錢啊。

學習完J2EE的這些具體技術,這個時候進行基本的J2EE開發應該是不成問題了。此時應該考慮提高自己的代碼質量了。這里我強烈推薦Martin Fowler的<>,這本書不是一本非常實際的書,作者完全是手把手地教你如何提高代碼質量,從具體地代碼中告訴你什麼是代碼的Bad Smell,如何去掉這些Bad Smell。不少書評是這么說的,這本書對於初級,中級的讀者幫助是立桿見影的。至少就我接觸到的幾個學習編程不久的程序員,編碼質量在短期內都有很大提高。當然重構(Refactoring)這一概念並不只針對Java語言的,它對所有OO語言都是適用的。重構的概念是如此深入人心,以至於今天幾乎所有流行的IDE工具都有對重構的支持。這里我還想再推薦一本<>。從C++過來的程序員都知道<>在C++領域的地位,至今還流傳著這樣的趣話,C++程序員分為兩種,一種是讀過<>的,另一種是沒有讀過C++的。雖然這本<>在Java領域的影響也許沒有那麼大,但對於Java程序員絕對有相當的指導價值。作者是Sun公司的Joshua Bloch,java Collection framework的設計者。作者站在JDK設計者的角度向你介紹他的Best Practice,應該這樣做而不應該那樣做,對於JDK中某些API設計的缺陷他也毫不袒護的指出。Java語言之父James Gosling為此書寫的前言是這么說的「I sure wish I had had this book ten years ago。 Some might think that I don't need any Java books, but I need this one」。這本書會讓你覺得原來你對Java還是有很多東西不了解的。舉個例子來說,對象的equals方法,我們認為它很簡單,也許你每天都在為你新寫的Class重載這個方法,但是你在重載的時候注意過「自反」,「對稱」,「傳遞」這些必須要考慮的因素,你是否同時還小心謹慎的重載了hashcode這個方法?如果沒有,建議你要讀一下這本書。讀完這本書,你會覺得離Java的距離更近了。上面兩本書都出過中文版,後面一本<>還有兩個版本的中文版,第一次翻譯的比較差一點,後來機械工業出版社又委託潘愛民先生重新翻譯了一遍。同一本書在同一個出版社連續被翻譯了兩次也說明國內出版界對這本書還是比較重視的。

這個階段,在看書的同時,可以結合著學習一些優秀的開源項目的源代碼。這些開源項目的代碼風格,注釋都是值得借鑒的。實在太懶也別忘了手頭上還有個Jdk的源代碼。其實也不用刻意去找源代碼,在實際的J2EE項目開發中,基本上都會用到一些優秀的開源項目。Framework可能會用到Spring,Struts,Log機制基本上都會JarkartaCommons Log或者Log4j,單元測試會大多會用Junit,結合項目閱讀一下其中的一些源代碼,既可以提高自己又對項目會有所幫助,說不定因此而得到PM的賞識呢。一舉兩得,何樂而不為呢。呵呵,有點扯遠了。過了初學者階段,該學會如何找到適合自己的Java書籍了。歷經數十載,今天的Java技術已經變的如此之龐雜,我相信即使窮凈一個人畢生之精力也不可能把Java所有的相關技術都學通,何況新技術還在層出不窮地推出,3年之前誰會知道Struts會成為Web框架事實上的工業標准。2年之前誰會知道Hibernate會在今天獨領風騷。既然已經不能指望一次性把java技術的方方面面都學個通,在實際中也只能是需要什麼技術再學習什麼技術了。而能否選擇一本好的參考書籍帶來的就是事半功倍和事倍工半的效果。所以我覺得花點時間放在選擇書籍上面還是很值得的,否則你在後面只會花更多的時間。下面我談談自己選擇書籍的一些經驗,不一定正確。首先看作者,像上面提到的那些書的作者,都是業界鼎鼎大名的,選擇他們的書一般錯不了。大家看的書多了,自己胸中自然也會有一個list,哪些作者是信得過的。二看出版社,計算機書籍方面,Oreilly,Addison-Wesley都是公認比較好的出版社。對於目前比較流行的Java技術,Oreilly的< in Action>>系列是不錯的選擇。另外我還會去看看Amazon網站(http://www.amazon.com/)的書評,一般小於3星級的書我都不會考慮。還有一個好去處theserverside,http://www.theserverside.com/的書評,這里的書評比較有趣,往往都有很激烈的爭論,裡面經常會看到一些名人在發言。我要向所有Java學習者推薦,如果我的收藏夾裡面只能存放兩個網站,我會選擇java.sun和theserverside。在這里你可以了解最新的Java動態,可以學習第一手的Java資料,可以看到Java高手們(裡面不乏業界大腕)激烈辯論。in Action>>

到此階段,Java Developer的基本功底應該算是打好了吧,往後就是不斷學習嘍。結束這一段之前,最後再介紹一本書Oreilly的<, Second Edition >>,因為我覺得多線程編程屬於Java基本功,每一個想學好Java的人都應該好好掌握。

提高篇

在這個階段應該從軟體架構,Framework層次上來學習了。作為面向對象的聖經<>, 這本書是不得不推薦的。不用再多說了,這本在面向對象領域地位完全是屬於教父級別的。不管你學習的是什麼OO語言,不管你現在是用.Net還是J2EE開發,這本書都是你進階之路上的必讀之書。而<>則專門針對於J2EE來討論設計模式,書中Sun Java Center的資深設計師描述了J2EE關鍵技術的模式。最佳實踐,設計策略和經過驗證的解決方案。對於每一個希望成為J2EE 架構師或者設計師,這本書值得一讀。學習設計模式的時候,建議是結合實際的源代碼來看,比如看看Junit源代碼,你可以看到很多設計模式優雅的實現,作者之一Erich Gamma本身就是<>的作者。至於J2EE的設計模式,Sun還開辟了專門的空間http://java.sun.com/blueprints/patterns/,裡面有對常用模式的討論又提供了詳細的源代碼樣例。正如Grady Booch所說,模式對於普遍問題提供了通用的解決方案,利用模式就等於擁有一個強大的專家隊伍。如果你還沒有學習,現在就開始吧。此外對於面向對象方法論,極限編程的思想也應該有所了解http://www.extremeprogramming.org/。對於J2EE項目的具體實施,Rod Johnson的<>也很有價值,該書以作者豐富的實戰經驗向我們展示如何用盡可能簡單的解決方案構建J2EE 應用,書中作者第一次提出這樣的觀點,很多時候,J2EE應用完全沒有必要用到EJB,對於言必稱EJB的廣大J2EE開發者來說,怎麼說也有點驚世咳俗的味道。當然,作為Servlet和JDO兩個專家組的成員,這可不是作者信口胡騶的。今天風靡Java世界的Spring框架最初便是源於此書,而IOC,AOP等概念更是被時下的java開發者掛在嘴邊。最後,作為對Java的深入學習,Java技術的各個Specification也有必要一讀。暫時就寫到這里吧。

Ⅵ java問題

這里的addActionListener是button的一個委託監聽函數,通過這個函數,button將所有發生在自己身上的動作事件交給addActionListener()括弧中的這個類對象來處理。這里是將動作事件就交給自己的類對象作處理,所以是this。
如果想要了解委託模式,建議看關於設計模式的書籍。這里就不贅述了。。。
還有不是只有在構造函數中才會用到this 和super,別的地方也可能會用到。。。學東西不要太絕對。。。。

Ⅶ java中的委託

委託模式是軟體設計模式中的一項基本技巧。在委託模式中,有兩個對象參與處理同一個請求,接受請求的對象將請求委託給另一個對象來處理。委託模式是一項基本技巧,許多其他的模式,如狀態模式、策略模式、訪問者模式本質上是在更特殊的場合採用了委託模式。委託模式使得我們可以用聚合來替代繼承,它還使我們可以模擬mixin。
「委託」在C#中是一個語言級特性,而在Java語言中沒有直接的對應,但是我們可以通過動態代理來實現委託!代碼如下:
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/*
* @author Liusheng
* 實現「委託」模式,用戶需要實現InvocationHandler介面;
* 參考:http://www.uml.org.cn/j2ee/200411036.htm
*/
public abstract class Delegator implements InvocationHandler {
//--------------------------------------------

protected Object obj_orgin = null; //原始對象
protected Object obj_proxy = null; //代理對象
//--------------------------------------------

public Delegator() {
}

public Delegator(Object orgin) {
this.createProxy(orgin);
}
/*
* 完成原始對象和委託對象的實例化
* @param orgin 原始對象實例
*/

protected Object createProxy(Object orgin) {
obj_orgin = orgin;
//下面語句中orgin.getClass().getClassLoader()為載入器,orgin.getClass().getInterfaces()為介面集
obj_proxy = Proxy.newProxyInstance(orgin.getClass().getClassLoader(), orgin.getClass().getInterfaces(), this); //委託
return obj_proxy;
}
/*
* 對帶有指定參數的指定對象調用由此 Method 對象表示的底層方法,具體請參見Java API
* @param args 參數
* @param method 方法類實例
*/

protected Object invokeSuper(Method method, Object[] args) throws Throwable {
return method.invoke(obj_orgin, args);
}
//--------------實現InvocationHandler介面,要求覆蓋------------
//下面實現的方法是當委託的類調用toString()方法時,操作其他方法而不是該類默認的toString(),這個類的其他方法則不會。

public Object invoke(Object obj, Method method, Object[] args) throws Throwable {
// 預設實現:委託給obj_orgin完成對應的操作
if (method.getName().equals("toString")) { //對其做額外處理
return this.invokeSuper(method, args) + "$Proxy";
} else { //注意,調用原始對象的方法,而不是代理的(obj==obj_proxy)
return this.invokeSuper(method, args);
}
}
}

下面的代碼,則是作為一個委託的例子,實現Map的功能。
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Hashtable;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.bs2.core.UtilLog;
/**
* @author Liusheng
* 本代碼主要用於演示RelegateTo的使用方法
*/
public class Delegator4Map extends Delegator {
private static Log _log = LogFactory.getLog(Delegator4Map.class);
private Map orginClass = null; //原始對象
private Map proxyClass = null; //代理對象

public Map getOrgin() {
return orginClass;
}

public Map getProxy() {
return proxyClass;
}

public Delegator4Map(Map orgin) {
super(orgin);
orginClass = orgin;
proxyClass = (Map) super.obj_proxy;
}

public Object invoke(Object obj, Method method, Object[] args) throws Throwable {
if (method.getName().equals("size")) { //修改size處理邏輯
Object res2 = new Integer(-1);
System.out.println("調用委託的方法");
return res2;
} else {
System.out.println("調用原始的方法");
return super.invoke(obj, method, args);
}
}

public static void main(String[] args) throws IOException {
Delegator4Map rtm = new Delegator4Map(new Hashtable());
Map m = rtm.getProxy();
m.size();
}
}

Ⅷ JAVA動態代理設計原理及如何實現

Java動態代理機制的出現,使得Java開發人員不用手工編寫代理類,只要簡單地制定一組介面及委託類對象,便能動態地獲得代理類。代理類會負責將所有的方法調用分配到委託對象上反射執行,配置執行過程中,開發人員還可以進行修改

代理設計模式

代理是一種常用的設計模式,其目的就是為其他對象提供一個代理以控制對某個對象的訪問。代理類負責為委託類預處理消息、過濾消息並轉發消息,以及進行消息被委託類執行後的後續處理。

  1. 為了保持行為的一致性,代理類和委託類通常會實現相同的介面

2. 引入代理能夠控制對委託對象的直接訪問,可以很好的隱藏和保護委託對象,也更加具有靈活性

代理機制及其特點

首先讓我們來了解一下如何使用 Java 動態代理。具體有如下四步驟:

  1. 通過實現 InvocationHandler 介面創建自己的調用處理器;

  2. 通過為 Proxy 類指定 ClassLoader 對象和一組 interface 來創建動態代理類;

  3. 通過反射機制獲得動態代理類的構造函數,其唯一參數類型是調用處理器介面類型;

  4. 通過構造函數創建動態代理類實例,構造時調用處理器對象作為參數被傳入。

代理類實例的一些特點

  1. 每個實例都會關聯一個InvocationHandler(調用處理器對象),在代理類實例上調用其代理介面中聲明的方法時,最終都會由InvocationHandler的invoke方法執行;

  2. java.lang.Object中有三個方法也同樣會被分派到調用處理器的 invoke 方法執行,它們是 hashCode,equals 和 toString;

代碼示例

最後以一個簡單的動態代理例子結束

閱讀全文

與java委託模式相關的資料

熱點內容
自己購買雲主伺服器推薦 瀏覽:419
個人所得稅java 瀏覽:759
多餘的伺服器滑道還有什麼用 瀏覽:189
pdf劈開合並 瀏覽:26
不能修改的pdf 瀏覽:750
同城公眾源碼 瀏覽:488
一個伺服器2個埠怎麼映射 瀏覽:297
java字元串ascii碼 瀏覽:78
台灣雲伺服器怎麼租伺服器 瀏覽:475
旅遊手機網站源碼 瀏覽:332
android關聯表 瀏覽:945
安卓導航無聲音怎麼維修 瀏覽:332
app怎麼裝視頻 瀏覽:430
安卓系統下的軟體怎麼移到桌面 瀏覽:96
windows拷貝到linux 瀏覽:772
mdr軟體解壓和別人不一樣 瀏覽:904
單片機串列通信有什麼好處 瀏覽:340
游戲開發程序員書籍 瀏覽:860
pdf中圖片修改 瀏覽:288
匯編編譯後 瀏覽:491