java訂閱發(fā)布模式代碼 實(shí)現(xiàn)一個簡單的發(fā)布訂閱模式

設(shè)計(jì)模式-快餐簡解-【觀察者模式】

【 觀察者模式應(yīng)用場景舉例 】

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作與策劃設(shè)計(jì),趙縣網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:趙縣等地區(qū)。趙縣做網(wǎng)站價(jià)格咨詢:18980820575

比如在玩 極品飛車 這款游戲 每一個車手到達(dá)終點(diǎn)的時候 都會在其它車手的屏幕上顯示 某某人以多少時間到達(dá)終點(diǎn)的提示 其實(shí)這就是一個典型的觀察者模式的應(yīng)用 觀察者模式即是典型的雙向一對多的應(yīng)用場景下用一的一端來通知多的一端

【 觀察者 模式解釋】

類型 行為模式

定義了一種一對多的依賴關(guān)系 讓多個觀察者對象同時監(jiān)聽某一個主題對象 這個主題對象的狀態(tài)發(fā)生改變時 會通知所有的觀察者對象 使它們能夠自己更新自己

【 觀察者 模式UML圖】

【 觀察者 模式 JAVA代碼實(shí)現(xiàn)】

新建抽象發(fā)布通知父類

package?carer_subject;import?java util ArrayList;import?java util List;import?carer_observer carer_observer;public?interface?carer_subject_parent?{????public?void?set_state(String?state_string);????public?String?get_state();????public?void?add_observer(carer_observer?carer_observer_ref);????public?void?sub_observer(carer_observer?carer_observer_ref);????public?void?notityAllCarer();}

新建發(fā)布通知實(shí)現(xiàn)類

package?carer_subject;import?java util ArrayList;import?java util List;import?carer_observer carer_observer;public?class?carer_subject_sub?implements?carer_subject_parent?{????Listcarer_observer?list_observer?=?new?ArrayListcarer_observer();????private?String?state;????public?void?set_state(String?state_string)?{????????this state?=?state_string;????}????public?String?get_state()?{????????return?state;????}????public?void?add_observer(carer_observer?carer_observer_ref)?{????????list_observer add(carer_observer_ref);????}????public?void?sub_observer(carer_observer?carer_observer_ref)?{????????list_observer remove(carer_observer_ref);????}????public?void?notityAllCarer()?{????????state?=? 到達(dá)終點(diǎn) ;????????for?(int?i?=? ;?i??list_observer size();?i++)?{????????????list_observer get(i) show_info();????????}????}}

新建觀察者接口

package?carer_observer;import?carer_subject carer_subject_parent;public?interface?carer_observer?{????public?void?show_info();}

新建觀察者實(shí)現(xiàn)類

package?carer_observer;import?carer_subject carer_subject_parent;public?class?carer_observer_imple?implements?carer_observer?{????private?carer_subject_parent?carer_subject_parent_ref;????public?carer_subject_parent?getCarer_subject_parent_ref()?{????????return?carer_subject_parent_ref;????}????public?void?setCarer_subject_parent_ref(????????????carer_subject_parent?carer_subject_parent_ref)?{????????this carer_subject_parent_ref?=?carer_subject_parent_ref;????}????public?carer_observer_imple(carer_subject_parent?carer_subject_parent_ref)?{????????super();????????this carer_subject_parent_ref?=?carer_subject_parent_ref;????}????public?void?show_info()?{????????System out println(carer_subject_parent_ref get_state());????}}

新建客戶端運(yùn)行類

package?run_main;import?carer_observer carer_observer_imple;import?carer_subject carer_subject_parent;import?carer_subject carer_subject_sub;public?class?run_main?{????public?static?void?main(String[]?args)?{????????carer_subject_parent?carer_subject_parent_ref?=?new?carer_subject_sub();????????carer_observer_imple?carer_observer_imple_ref ?=?new?carer_observer_imple(????????????????carer_subject_parent_ref);????????carer_observer_imple?carer_observer_imple_ref ?=?new?carer_observer_imple(????????????????carer_subject_parent_ref);????????carer_observer_imple?carer_observer_imple_ref ?=?new?carer_observer_imple(????????????????carer_subject_parent_ref);????????carer_observer_imple?carer_observer_imple_ref ?=?new?carer_observer_imple(????????????????carer_subject_parent_ref);????????carer_subject_parent_ref add_observer(carer_observer_imple_ref );????????carer_subject_parent_ref add_observer(carer_observer_imple_ref );????????carer_subject_parent_ref add_observer(carer_observer_imple_ref );????????carer_subject_parent_ref add_observer(carer_observer_imple_ref );????????carer_subject_parent_ref sub_observer(carer_observer_imple_ref );????????carer_subject_parent_ref set_state( 到達(dá)終點(diǎn) );????????carer_subject_parent_ref notityAllCarer();????}}

程序運(yùn)行結(jié)果如下

到達(dá)終點(diǎn)到達(dá)終點(diǎn)到達(dá)終點(diǎn)

以一對多的方式進(jìn)行對一方狀態(tài)的改變而去通知多方 觀察者模式也叫發(fā)布/訂閱模式 一方進(jìn)行發(fā)布 而多方進(jìn)行訂閱 和生活中看報(bào)紙一樣 你喜歡訂城市晚報(bào) 就會發(fā)給你

【 觀察者 模式 MyEclipse 項(xiàng)目JAVA代碼實(shí)現(xiàn)】

lishixinzhi/Article/program/Java/gj/201311/27277

關(guān)于java

Java的Sun Microsystems的Java編程語言介紹了1995年5月(以下簡稱為Java語言)和Java平臺的總稱的。 HotJava瀏覽器(Java實(shí)現(xiàn)支持Java小程序)Java的魅力:跨平臺,動態(tài)的Web,Internet計(jì)算。從那時起,Java被廣泛接受和推廣網(wǎng)絡(luò)的快速發(fā)展,常用的瀏覽器現(xiàn)在支持Java applets。另一方面,Java技術(shù)是不斷更新的。

Java平臺的Java虛擬機(jī)(Java虛擬機(jī))和Java應(yīng)用程序編程接口(應(yīng)用程序編程接口,或API)構(gòu)成。獨(dú)立的操作系統(tǒng)提供一個標(biāo)準(zhǔn)接口,可分為用于Java應(yīng)用程序的Java應(yīng)用程序編程接口的基本部分和擴(kuò)展。 Java應(yīng)用程序可以運(yùn)行在Java平臺上安裝的硬件或操作系統(tǒng)平臺?,F(xiàn)在Java平臺已經(jīng)嵌入在幾乎所有的操作系統(tǒng)。因此,Java程序可以只編譯一次,并可以運(yùn)行在不同的系統(tǒng)。 Java應(yīng)用編程接口已經(jīng)發(fā)展從1.1倍版本到1.2版本。 Java平臺基于Java1.4,最近版本為Java1.7。

Java是分為三個系統(tǒng)JavaSE中(Java2平臺標(biāo)準(zhǔn)版(32位x86)的Java平臺,標(biāo)準(zhǔn)版),JavaEE服務(wù)器(Java 2平臺企業(yè)版Java平臺,企業(yè)版),和JavaME(Java 2平臺Micro版平臺的Java微型版)。

2009年的甲骨文(Oracle)宣布收購的太陽。

[編輯本段] JAVA的名字起源

一天,幾個Java組的成員正在討論如何命名這個新的語言,他們是爪哇(Java)的咖啡館喝著咖啡,稱為Java這項(xiàng)建議已得到別人的想法,Java名稱的傳播。沒有去看看原來的Sun Java徽標(biāo)認(rèn)為,現(xiàn)在看,這不就是一杯熱氣騰騰的咖啡嗎?

[編輯本段] Java語言特性

Java是一個簡單的,面向?qū)ο蟮模植际降?,解釋了安全,可靠的結(jié)構(gòu)中立的,可移植的,高性能的多線程的動態(tài)語言。

當(dāng)SUN的Java語言于1995年推出后,眼中的世界是神奇的語言吸引。 Java中到底有什么神奇的?

Java語言其實(shí)出生于1991年,最初稱為OAK語言,SUN公司為一些消費(fèi)性電子產(chǎn)品和通用設(shè)計(jì)環(huán)境。他們最初的目的只是為了開發(fā)一種獨(dú)立于平臺的軟件技術(shù),可以說是未知的,它幾乎夭折,并在網(wǎng)絡(luò)出現(xiàn)之前,OAK。然而,互聯(lián)網(wǎng)的出現(xiàn)改變了OAK的命運(yùn)。

的Java來臨之前,在互聯(lián)網(wǎng)上的信息內(nèi)容都是一些無聊的剛性HTML文件。這是針對那些癡迷的WEB瀏覽器的人簡直是無法忍受的。他們迫切希望看到的網(wǎng)絡(luò)互動內(nèi)容開發(fā)創(chuàng)建一個類,不需要考慮硬件和軟件平臺,可以執(zhí)行應(yīng)用程序的WEB是非??扇〉?,當(dāng)然,這些程序也有一個很大的安全。對于用戶來說,這樣的要求,傳統(tǒng)的編程語言是無能為力的。 SUN的工程師敏銳地認(rèn)識到,從1994年起,他們開始OAK在WEB和HotJava的第一個版本所采用的技術(shù)。 SUN 1995年正式推出的Java的名義,幾乎所有的Web開發(fā)人員心中感嘆:哦,這正是我想要的!因此,Java已經(jīng)成為一顆耀眼的明星,丑小鴨變成白天鵝的整個事情。

[編輯本段] Java的主要特點(diǎn)

Java語言是簡單的。 Java語言的語法與C語言和C + +語言很接近大多數(shù)程序員很容易學(xué)習(xí)和使用Java。另一方面,Java已經(jīng)丟棄了C + +中很少使用,這是很難理解的,令人困惑的功能,比如操作符重載,多繼承,自動投。特別是,Java語言不使用指針,并提供了自動的廢料收集,這樣程序員就不必?fù)?dān)心內(nèi)存管理。

2,Java語言是一種面向?qū)ο蟮摹?Java語言的類,接口和繼承原語,為了簡單起見,只支持類之間的單繼承,但支持接口之間的多重繼承,并支持實(shí)施機(jī)制之間的類和接口(關(guān)鍵字實(shí)現(xiàn))。 Java語言全面支持動態(tài)綁定,而C + +虛函數(shù)使用動態(tài)綁定??傊?,Java語言是一種純粹的面向?qū)ο缶幊陶Z言。

3,Java語言是分布式的。 Java語言支持開發(fā)互聯(lián)網(wǎng)應(yīng)用,在基本的Java應(yīng)用程序編程接口,它提供了網(wǎng)絡(luò)應(yīng)用編程的類庫,包括URL,URL連接,套接字,ServerSocket的網(wǎng)絡(luò)應(yīng)用程序編程接口(java.net)。 Java的RMI(遠(yuǎn)程方法激活)機(jī)制是開發(fā)分布式應(yīng)用程序的重要手段。

4,Java語言是健壯的。 Java的強(qiáng)類型,異常處理,自動垃圾收集的Java程序健壯性的重要保證。指針下降的Java明智的選擇。 Java的安全檢查機(jī)制使得Java更強(qiáng)的魯棒性。

5,Java語言是安全的。 Java是經(jīng)常被用來在網(wǎng)絡(luò)環(huán)境中,Java提供了一個安全機(jī)制,以防止惡意代碼的攻擊。除了許多Java語言的安全功能,通過網(wǎng)絡(luò)下載Java類的安全機(jī)制(類加載器)分配一個不同的名稱空間,以防止其他本地類相同的名稱,字節(jié)代碼檢查,并提供安全管理機(jī)制(類SecurityManager的)允許Java應(yīng)用程序設(shè)置安全哨兵。

6,Java語言是體系結(jié)構(gòu)中立的。 Java程序(后綴為java文件)被編譯Java平臺的體系結(jié)構(gòu)中立的字節(jié)碼格式的(類文件后綴),然后你就可以在Java平臺上運(yùn)行的任何系統(tǒng)。這種方法適用于異構(gòu)的網(wǎng)絡(luò)環(huán)境和軟件分發(fā)。

7,Java語言是可移植的。這種可移植性體系結(jié)構(gòu)中立此外,Java有嚴(yán)格的規(guī)定,每個基本數(shù)據(jù)類型的長度。 Java系統(tǒng)本身具有很強(qiáng)的可移植性,Java編譯器是用Java實(shí)現(xiàn)的,Java的運(yùn)行時環(huán)境中實(shí)現(xiàn)ANSI C.

8,Java語言的解釋。正如前面提到的在Java平臺上被編譯成字節(jié)碼格式,然后可以運(yùn)行在任何系統(tǒng)中的Java平臺,Java程序。在運(yùn)行時,Java平臺,Java解釋器解釋執(zhí)行這些字節(jié)碼類實(shí)施過程中需要加載到操作系統(tǒng)環(huán)境的耦合階段。

9,Java是一種高性能。與解釋型的腳本語言相比,Java是確實(shí)是一個高性能。事實(shí)上,Java的運(yùn)行速度,搭配-IN-TIME(JIT)編譯器技術(shù)的發(fā)展,越來越多的接近C + +。

10,Java語言是多線程的。線程是Java語言中的一種特殊的對象,它必須創(chuàng)建Thread類的子類(星期日)。通常有兩種方法創(chuàng)建一個線程:首先,使用形式的幾何結(jié)構(gòu),主題(可運(yùn)行)構(gòu)造函數(shù)將一個實(shí)現(xiàn)Runnable接口的對象包裝成一個線程,第二子類派生從Thread類并重寫run方法中,創(chuàng)建使用子類對象的線程。值得注意的是Thread類實(shí)現(xiàn)Runnable接口,因此,任何一個線程都有它的run方法,run方法包含的線程中運(yùn)行的代碼。的線程的活動來控制由一組方法。 Java語言支持同時執(zhí)行多個線程之間的同步機(jī)制的多線程(關(guān)鍵字為synchronized)。

11,Java語言是動態(tài)的。 Java語言的設(shè)計(jì)目標(biāo)之一的是,適于在環(huán)境中的動態(tài)變化。類的Java程序需要動態(tài)加載的經(jīng)營環(huán)境,但也通過網(wǎng)絡(luò)來加載所需的類。這也有利于軟件的升級。此外,Java類的運(yùn)行時類型檢查的運(yùn)行時表示。

Java語言的優(yōu)秀功能,使Java應(yīng)用程序具有無與倫比的耐用性和可靠性,這也降低了應(yīng)用系統(tǒng)的維護(hù)成本。 Java嵌入式對象技術(shù)和Java平臺API的支持可以縮短應(yīng)用開發(fā)時間并降低成本。 Java編譯,到處運(yùn)行的特性使得它能夠提供一個開放的架構(gòu)可在任何地方,和低成本的方式來傳遞信息之間的多平臺。特別是Java企業(yè)應(yīng)用編程接口(Java企業(yè)API)為企業(yè)計(jì)算及電子商務(wù)應(yīng)用提供相關(guān)的技術(shù)和豐富的類庫。 [編輯本段] Java的相關(guān)技術(shù)

JDBC(Java數(shù)據(jù)庫連接)提供了一個統(tǒng)一的接口來連接各種關(guān)系數(shù)據(jù)庫,可提供統(tǒng)一的訪問各種關(guān)系數(shù)據(jù)庫,它由一組用JAVA語言編寫的類和接口。 JDBC標(biāo)準(zhǔn)的API,JDBC為工具/數(shù)據(jù)庫開發(fā)人員,你可以構(gòu)建更高級的工具和接口,數(shù)據(jù)庫開發(fā)人員用純Java API來編寫數(shù)據(jù)庫應(yīng)用程序,是一個商標(biāo)名稱。

2,EJB(企業(yè)JavaBeans)可以讓開發(fā)人員能夠輕松地創(chuàng)建,部署和管理跨平臺的基于組件的企業(yè)應(yīng)用程序。

3,用于開發(fā)分布式Java應(yīng)用程序的Java的Java遠(yuǎn)程方法調(diào)用(RMI)。 Java對象,可以遠(yuǎn)程Java虛擬機(jī)調(diào)用。在這種方式中,遠(yuǎn)程方法激活可以發(fā)生在對等的兩端,也可以發(fā)生在客戶端和服務(wù)器之間,只要這兩個應(yīng)用程序都是用Java編寫的。

4,Java的Java接口定義語言IDL()提供CORBA(公共對象請求代理體系結(jié)構(gòu))的無縫互操作性。這使得Java可以集成異構(gòu)的業(yè)務(wù)信息資源。

5,JNDI(Java命名和目錄接口)提供了一個統(tǒng)一的Java平臺無縫連接。這個接口屏蔽了企業(yè)網(wǎng)絡(luò)中使用的各種命名和目錄服務(wù)。

6,JMAPI(Java管理API)提供了一套豐富的對象和方法的異構(gòu)網(wǎng)絡(luò)系統(tǒng),網(wǎng)絡(luò)和服務(wù)管理的發(fā)展。

7,JMS(Java消息服務(wù)),提供企業(yè)短信服務(wù),如可靠的消息隊(duì)列,發(fā)布和訂閱通信,以及推 - 拉(推/拉)技術(shù)。

8,JTS(Java事務(wù)服務(wù))提供開放的標(biāo)準(zhǔn)訪問事務(wù)資源,包括事務(wù)處理應(yīng)用程序,事務(wù)處理,管理和監(jiān)測這些事務(wù)處理資源。

關(guān)注JavaBean,它是一個開放的標(biāo)準(zhǔn)的組件體系結(jié)構(gòu),它是獨(dú)立于平臺,但使用Java語言的Java技術(shù),。一個JavaBean,以滿足JavaBeans規(guī)范的Java類通常定義了一個現(xiàn)實(shí)世界的事物或概念。一個JavaBean屬性,方法和事件的主要特點(diǎn)。通常情況下,在一個開發(fā)環(huán)境,支持JavaBeans規(guī)范(如Sun的Java Studio和IBM的VisualAge for Java)中,您可以直觀地操作的JavaBean,也可以使用JavaBean構(gòu)建一個新的JavaBean。 JavaBean的優(yōu)勢在于Java的可攜性?,F(xiàn)在,EJB(企業(yè)JavaBeans)的JavaBean概念擴(kuò)展到Java服務(wù)器端組件體系結(jié)構(gòu),這個模型支持多層的分布式對象應(yīng)用程序。除了到JavaBean,一個典型的組件體系結(jié)構(gòu)DCOM和CORBA,在這些組件的體系結(jié)構(gòu)的深入討論超出了本書的范圍。

Java的

計(jì)算機(jī)科學(xué)課程列表

JNI(Java本地接口)Java本機(jī)接口。

[編輯本段]

[Java開源J2EE框架Spring框架的Java開源項(xiàng)目]

Spring是一個解決方案,許多在J2EE開發(fā)功能強(qiáng)大的框架中的常見問題。 Spring提供了一個統(tǒng)一的管理業(yè)務(wù)對象的方法,并鼓勵他們養(yǎng)成良好的生活習(xí)慣注入接口編程,而不是編程的類型。 Spring框架的基礎(chǔ)是基于使用JavaBean屬性控制反轉(zhuǎn)容器。然而,這是完整的圖片只是其中的一部分:Spring IoC容器作為一個完成的建筑關(guān)注所有架構(gòu)層的完整解決方案是獨(dú)一無二的。 Spring提供了唯一的數(shù)據(jù)訪問抽象,包括簡單和有效率的JDBC框架,極大地提高了工作效率,并減少了出錯的可能性。 Spring的數(shù)據(jù)訪問架構(gòu)還集成了Hibernate和其他O / R映射解決方案。 Spring還提供了一個唯一的事務(wù)管理抽象,它能夠在各種底層事務(wù)管理技術(shù),例如JTA或者JDBC事務(wù)提供一個一致的編程模型。 Spring AOP框架提供了一個標(biāo)準(zhǔn)的Java語言,聲明式事務(wù)管理和其它企業(yè)服務(wù) - 如果你需要 - 還能實(shí)現(xiàn)自己的方面的POJO。這個框架足夠強(qiáng)大,以使應(yīng)用程序能夠拋開EJB的復(fù)雜性,同時享受關(guān)鍵服務(wù)和傳統(tǒng)EJB。 Spring還提供了集成和IoC容器強(qiáng)大而靈活的MVC Web框架。 [SpringIDE:Eclipse平臺支持開發(fā)的一個插件。

WebWork的組件化和代碼重用【Java開源的Web框架]開發(fā)

WebWork是由OpenSymphony組織專門拉出MVC模式J2EE Web框架。 WebWork的最新版本是2.1,現(xiàn)在WebWork2.x的前身,里卡德奧伯格開發(fā)的WebWork的WebWork的已經(jīng)被分成兩個項(xiàng)目Xwork1和webwork2的。 Xwork簡潔,靈活功能強(qiáng)大,它是一個標(biāo)準(zhǔn)的Command模式,并且完全從web層脫離出來。 XWork之上提供了很多核心功能:前端攔截器(Interceptor)運(yùn)行時表單屬性驗(yàn)證,類型轉(zhuǎn)換,強(qiáng)大的表達(dá)式語言(OGNL - 對象圖形標(biāo)記語言)的IoC(控制反轉(zhuǎn)控制反轉(zhuǎn))容器。在建立XWork的頂部webwork2的處理HTTP的響應(yīng)和請求。 webwork2的使用的ServletDispatcher HTTP請求轉(zhuǎn)化為行動(業(yè)務(wù)層Action類)的映射會話(session)的應(yīng)用范圍(應(yīng)用程序),請求的請求參數(shù)映射。 webwork2的支持多視圖的視圖部分可以使用JSP,速度,F(xiàn)reeMarker的的,JasperReports,XML。在WebWork2.2增加了對AJAX的支持,這種支持是建立的基礎(chǔ)上的DWR與Dojo框架【EclipseWork:用于WebWork的一個Eclipse插件,幫助開發(fā)人員

的Struts【Java開源的Web框架]

Struts是一個基于J2EE平臺的MVC框架,主要是采用Servlet和JSP技術(shù)。 Struts應(yīng)用程序開發(fā)人員可以完全滿足需求,易于使用,靈活快速亂舞在過去的一年。 Struts的的Servlet,JSP,自定義標(biāo)簽和信息資源(信息資源)整合到一個統(tǒng)一的框架,開發(fā)人員可以使用它的發(fā)展不再需要自己編碼實(shí)現(xiàn)全套MVC模式,極大的節(jié)約的時間,讓是Struts是一個非常不錯的應(yīng)用框架。 StrutsIDE:對Struts協(xié)助開發(fā)一個Eclipse插件]

休眠[開放源碼的Java持久化框架]

Hibernate是一個開放源代碼的對象關(guān)系映射框架,它對JDBC進(jìn)行非常輕量級的對象編程思維對象的封裝性,使任意的Java程序員可以使用它來操縱數(shù)據(jù)庫的。 Hibernate可以應(yīng)用任何場合使用JDBC,無論是客戶端程序在Java實(shí)用程序也可以使用一個Servlet / JSP的Web應(yīng)用程序中,最具革命性的,Hibernate可以取代CMP EJB的J2EE架構(gòu)的應(yīng)用程序來完成數(shù)據(jù)持久化的重要任務(wù)。 Hibernate在Eclipse平臺的輔助開發(fā)工具:【使用Hibernate Synchronizer】【MiddlegenIDE

石英[Java的開源作業(yè)調(diào)度】

Quartz是OpenSymphony的開源組織在該領(lǐng)域的工作安排的一個開源項(xiàng)目,它可以與J2EE,J2SE應(yīng)用程序相結(jié)合也可以單獨(dú)使用。 Quartz可以用來創(chuàng)建簡單或運(yùn)行十,百,甚至是數(shù)以十萬計(jì)的就業(yè)機(jī)會,每天的日程是如此復(fù)雜。 Jobs可以做成標(biāo)準(zhǔn)的Java組件或EJBs。石英石英1.5.0的最新版本。

速度【Java開源模板引擎

Velocity是一個基于java的模板引擎(模板引擎)。它允許任何人僅僅簡單的使用模板語言模板語言來引用由java代碼定義的對象。速度應(yīng)用于web開發(fā)時,界面設(shè)計(jì)和java程序開發(fā)人員同步開發(fā)遵循MVC架構(gòu)的網(wǎng)站,也就是說,頁面設(shè)計(jì)人員可以專注于顯示的頁面,java程序開發(fā)人員關(guān)注業(yè)務(wù)邏輯編碼。速度java代碼從網(wǎng)頁中分離出來,便于長期維護(hù)的網(wǎng)站,同時也為我們在JSP和PHP提供了另一種解決方案。 Velocity的能力遠(yuǎn)超過網(wǎng)絡(luò)網(wǎng)站的發(fā)展在這方面,例如,它可以產(chǎn)生SQL和PostScript的,XML模板(模板),它也可以被用來作為一個獨(dú)立的工具,以產(chǎn)生源代碼和報(bào)告,或者作為其他系統(tǒng)的集成組零件。速度還提供了模板服務(wù)的汽輪機(jī)的web開發(fā)框架(模板服務(wù))。速度+渦輪機(jī)提供一個模板服務(wù),允許Web應(yīng)用程序開發(fā)一個真正的MVC模型。 【VeloEclipse:發(fā)展速度的輔助插件Eclipse平臺]

IBATIS [開放源碼的Java持久化框架

使用的iBatis提供的ORM機(jī)制,在人事方面,實(shí)現(xiàn)了業(yè)務(wù)邏輯,面對純Java對象,這一層通過Hibernate ORM而言基本相同的具體的數(shù)據(jù)操作,Hibernate會自動生成SQL語句,ibatis的要求開發(fā)者編寫具體的SQL語句。相對Hibernate的“全自動”O(jiān)RM機(jī)制,ibatis的SQL開發(fā)的工作量和數(shù)據(jù)庫移植性上的讓步,系統(tǒng)設(shè)計(jì)提供了更大的自由空間。實(shí)現(xiàn)的有益補(bǔ)充,作為“全自動”O(jiān)RM ibatis的外觀顯得特別有意義。

Compiere的ERP&CRM【Java開源的ERP和CRM系統(tǒng)

Compiere的ERP&CRM提供全面的解決方案,為全球小型和中小型企業(yè),涵蓋所有領(lǐng)域,從客戶管理,供應(yīng)鏈,財(cái)務(wù),管理,支持多組織,多幣種,多會計(jì)模式,多成本,多語種,多稅收國際化的特征。易于安裝,易于實(shí)施,易于使用。只需要幾個小時,你可以用采購 - 采購 - 發(fā)票 - 付款報(bào)價(jià) - 訂單 - 發(fā)票 - 收款,產(chǎn)品定價(jià),資產(chǎn)管理,客戶關(guān)系,供應(yīng)商關(guān)系,員工關(guān)系,的運(yùn)作分析功能強(qiáng)大的結(jié)果。

滾子Weblogger【Java開源Blog博客]

網(wǎng)絡(luò)博客更復(fù)雜的設(shè)計(jì),源代碼是一個很好的學(xué)習(xí)材料。它應(yīng)該支持網(wǎng)絡(luò)博客的功能,如:評論功能,所見即所得的HTML編輯器,引用,提供了頁面模板,RSS聚合的blogroll,管理,并提供了一個XML-RPC接口。

Eclipse的Java的開放源代碼開發(fā)工具]

Eclipse平臺的開發(fā)框架,IBM捐贈給開放源代碼社區(qū),不是因?yàn)樗侵腎BM聲稱-4千萬美元投資的發(fā)展,總數(shù)的資金,但如此巨大的投資,因?yàn)榻Y(jié)果:一個成熟的,精心設(shè)計(jì)的,可擴(kuò)展的體系結(jié)構(gòu)。

的NetBeans【Java開源開發(fā)工具]

NetBeans IDE是一個軟件開發(fā)提供了免費(fèi),開源的集成開發(fā)環(huán)境。你可以得到所有的工具,你需要使用Java,C / C + +甚至是Ruby來創(chuàng)建專業(yè)的桌面應(yīng)用程序,企業(yè)應(yīng)用程序,web和移動應(yīng)用程序。 IDE可以在多種平臺上運(yùn)行,包括Windows,Linux和Mac OS X中,和Solaris,這是非常易于安裝和易于使用的。

XPlanner【Java開源的項(xiàng)目管理

XPlanner一個基于Web的XP團(tuán)隊(duì)計(jì)劃和跟蹤工具。 XP獨(dú)特的開發(fā)概念,如迭代,用戶故事,,XPlanner提供了相應(yīng)的管理工具,XPlanner支持XP開發(fā)流程,并解決遇到的問題的使用XP想法的開發(fā)項(xiàng)目。 XPlanner特點(diǎn)包括:簡單的模型規(guī)劃,虛擬筆記卡(虛擬筆記卡)迭代的用戶故事和工作記錄的追蹤,未完成的故事會自動迭代,工作時間追蹤,生成團(tuán)隊(duì)效率,個人考勤表,SOAP界面支持。

HSQLDB【Java開源DBMS數(shù)據(jù)庫

HSQLDB(高超聲速SQL)是一個純Java的關(guān)系數(shù)據(jù)庫的開發(fā),并提供了一個JDBC驅(qū)動程序來訪問數(shù)據(jù)。支持ANSI-92標(biāo)準(zhǔn)SQL語法。而且他占的空間小。大約只有160K,快速的數(shù)據(jù)庫引擎。

Liferay的【Java的開源門戶和

代表一個完整的J2EE應(yīng)用程序,使用Web,EJB以及JMS等技術(shù),特別是在前面部分使用Struts框架技術(shù)的接口,XML-基于portlet配置文件可以自由動態(tài)擴(kuò)展,使用Web服務(wù)來支持一些遠(yuǎn)程訪問的信息,Apahce Lucene的全文搜索功能。

Jetspeed的?【Java開源的門戶門戶]

Jetspeed是一個開放源代碼的企業(yè)信息門戶(EIP)的實(shí)現(xiàn),使用的技術(shù)是Java和XML。信息門戶的用戶可以使用瀏覽器,支持WAP協(xié)議的手機(jī)或其他設(shè)備訪問Jetspeed的架設(shè)。 Jetspeed的所扮演的角色的信息集中器,它可以把信息一起,很容易地提供給用戶。

的JOnAS【Java開源的J2EE服務(wù)器]

的JOnAS是一個開放源代碼的J2EE實(shí)現(xiàn)的ObjectWeb協(xié)會開發(fā)。集成Tomcat或Jetty成為它的Web容器,以確保符合Servlet 2.3和JSP 1.2規(guī)范。 JOnAS服務(wù)器的依賴,實(shí)現(xiàn)以下的Java API:JCA,JDBC,JTA,JMS,JMX,JNDI,JAAS,JavaMail的。

JFox3.0【Java開源的J2EE服務(wù)器使用

JFox是一個開源的Java EE應(yīng)用服務(wù)器,致力于提供一個輕量級的Java EE應(yīng)用服務(wù)器,從3.0開始,JFox提供了一個支持模塊化MVC框架,以簡化EJB和Web應(yīng)用程序的開發(fā)!如果您正在尋找一個簡單,重量輕,高效,全面的Java EE開發(fā)平臺,JFox正是你需要的。

[編輯本段] Java的IDE

當(dāng)今最流行的Eclipse,Myeclipse中,Jbuilder2008,Jdeveloper的,Netbeans的。 [編輯本段] Java“一書

Java編程思想(第4版)

:(美)埃克爾,陳薅怦翻譯

JAVA編程思想(第四版)出版社:機(jī)械工業(yè)出版社

出版日期:2007-6-1詞:版次:1頁數(shù):880印刷時間:2007/06/01開本:印象:紙張:膠版紙ISBN:9,787,111,213,826包裝:平裝

關(guān)于作者

Bruce Eckel的是MindView公司的總裁,該公司提供的軟件,其客戶的咨詢和培訓(xùn)。他的C + +標(biāo)準(zhǔn)委員會的投票成員之一,擁有應(yīng)用物理學(xué)學(xué)士和計(jì)算機(jī)工程碩士學(xué)位。除了這本書外,他是一個“C + +編程思想”的人合作撰寫的“C + +編程思想,第2卷”(兩本書的英文影印版和中國版引入了由機(jī)械工業(yè)出版社出版)及其他著作。他已發(fā)表了150多篇論文,還經(jīng)常參加世界各地的研討會并發(fā)表演講。

[編輯本段] Java版本歷史

Java語言誕生于1995年,

日,1996年,第一個JDK-JDK1.0出生的

1996年4月,10個最重要的操作系統(tǒng)供應(yīng)商確認(rèn)其產(chǎn)品中嵌入JAVA技術(shù)

1996年9月,約83,000 Web應(yīng)用程序的JAVA技術(shù),使

1997年2月18日一天,JDK1.1版本

1997年的JavaOne大會,參與者超過百萬人,創(chuàng)下了類似的全球規(guī)模的會議記錄

1997年,JavaDeveloperConnection社區(qū)成員超過10萬

1998年,JDK1.1被下載超過200萬次

在1998年,JAVA2企業(yè)平臺發(fā)布

1999年,Sun發(fā)布了Java J2EE三個版本:標(biāo)準(zhǔn)版(J2SE),企業(yè)版(J2EE)和微型版(J2ME)

2000年5月8日,JDK1.3發(fā)布 / 2000年5月29日,JDK1.4 2001年,諾基亞公司宣布,2003年將銷售100萬的Java功能的手機(jī)

2月2001年9月24日,2010年,J2EE1.3

2002年, 26日,J2SE1.4,因?yàn)镴ava的計(jì)算能力已顯著增加

9月30日,2004 18:00 PM,J2SE1.5發(fā)布,成為Java語言的發(fā)展歷史的又一個里程碑。要顯示版本的重要性,J2SE1.5更名為Java SE 5.0的

2005年JavaOne大會上,Sun公司公開Java SE 6中。在這一點(diǎn)上,各種版本的Java已經(jīng)被重新命名為取消一個數(shù)字“2”:J2EE更名為Java EE,J2SE更名為更名為Java SE,J2ME的Java ME

2006年12月,Sun發(fā)布了JRE6目前JDK7.0 0.0

在研究和開發(fā),有測試版的的 。 dev.java.net / 可下載

[編輯本段] Java的互聯(lián)網(wǎng)

我們知道,以前的WWW不僅可以發(fā)送文字和圖片,Java的交互式頁的的出現(xiàn)是一個偉大的革命。

的Java,設(shè)計(jì)不是互聯(lián)網(wǎng),萬維網(wǎng),它也可以被用來編寫?yīng)毩⒌膽?yīng)用程序。 Java是一種面向?qū)ο蟮恼Z言,Java語言是C + +語言,所以我們必須掌握C + +編程語言,再學(xué)習(xí)Java語言是很容易的! Java程序需要編譯,它被放置在互聯(lián)網(wǎng)服務(wù)器上,當(dāng)用戶對服務(wù)器的訪問,Java程序被下載到本地用戶的機(jī)器,解釋的瀏覽器中運(yùn)行。實(shí)際上有兩種Java程序的Java應(yīng)用程序是一個完整的程序,如Web瀏覽器。另一個Java應(yīng)用程序運(yùn)行在一個Web瀏覽器程序。

Java程序其瀏覽器Hotjava中,提供了一種方法,可以讓你的瀏覽器中運(yùn)行的程序。您可以直接從您的瀏覽器來播放聲音,你可以播放動畫,Java的也可以告訴你如何處理與一個新的類型的文件瀏覽器的頁面。當(dāng)我們能夠在2400波特線來傳輸視頻圖像,Hotjava中能夠顯示視頻。

[編輯本段] Java和電子商務(wù)

,電子商務(wù)是當(dāng)今的一個熱門話題,傳統(tǒng)的編程語言,但是,不能做電子商務(wù)系統(tǒng),電子商務(wù)程序代碼的基本要求:安全,可靠,做生意的世界各地,在不同的平臺上運(yùn)行的客戶機(jī)的要求。 Java的強(qiáng)大的安全性,平臺無關(guān)的,獨(dú)立的硬件結(jié)構(gòu),用簡單的語言,面向?qū)ο?,并在網(wǎng)絡(luò)編程語言中占據(jù)無可比擬的優(yōu)勢,成為電子商務(wù)系統(tǒng)的首選語言。

[編輯本段] Java的8個基本數(shù)據(jù)類型和它們的包裝類

int基本數(shù)據(jù)類型的包裝類的原始類型的份額

短短2個字節(jié)的整數(shù)中的字節(jié)數(shù)4個字節(jié)

長8個字節(jié)

浮子的4個字節(jié)

雙人大床8個字節(jié)

字節(jié)字節(jié)1個字節(jié)

CHAR字符2個字節(jié)

布爾布爾測試編譯環(huán)境

[編輯本段]第一個JAVA程序的HelloWorld

/ /文件名的HelloWorld.java

/ /聲明公共類一類

的HelloWorld { / /聲明一個方法

公共靜態(tài)無效的主要(字串[] args){/ /程序入口

/ /輸出

(“世界你好!); BR /}

}

/ /例子

包的文本;

類測試(

公共靜態(tài)無效的主要(字串[] args){...... /短D = 12,/ /短整型的

System.out.println(D); / / D

長,C = 144L; / /長整數(shù)添加L

系統(tǒng)通過out.println(C)/ /輸出

詮釋Z = 15; / /整數(shù)

System.out.println(Z)/ /輸出

字符E ='I “/ /字符”

System.out.println(五);/ /輸出è

}

[編輯本段] Java新手入門是非常重要的一個一些基本的概念

[1] [2] [3]最后一類:為防止他人從你的類派生出新的類,它是不可擴(kuò)展的。

動態(tài)調(diào)用比靜態(tài)調(diào)用花費(fèi)的時間要長。

抽象類:規(guī)定一個或多個抽象方法的類本身必須定義為abstract。

案件:公共抽象的字符串getDescripition

Java的每一個類都是從Object類擴(kuò)展。和

平等和對象類的toString方法。

等于用于測試一個對象是否與另一個對象是相等的。

的toString返回一個字符串,幾乎每一個類的對象將覆蓋此方法,以便返回當(dāng)前狀態(tài)的正確表示。

(toString方法是一個很重要的方法)

泛型編程:所有的值?任何類型可以是同一對象類的變量,而不是。

數(shù)組列表:ArrayList的動態(tài)數(shù)組列表,是一個類庫,定義在java.uitl包可自動調(diào)節(jié)數(shù)組的大小。

類的類對象類的getClass方法返回一個類型的實(shí)例的類,它包含的主要方法的類會被加載在程序啟動時,虛擬機(jī)是所有他需要的類,每一個加載的類加載必須加載它需要的類。

java中什么叫"觀察者設(shè)計(jì)模式"?

觀察者模式(Observer Pattern),又被稱為發(fā)布/訂閱模式,它是軟體設(shè)計(jì)模式中的一種。觀察者模式定義了對象間的一種一對多的依賴關(guān)系,當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并被自動更新。

在觀察者模式中,一個目標(biāo)物件(被觀察者)管理所有相依于它的觀察者物件,并且在它本身的狀態(tài)改變時主動發(fā)出通知,這通常通過呼叫各觀察者所提供的方法來實(shí)現(xiàn)。此種模式通常被用來實(shí)作事件處理系統(tǒng)。觀察者模式有很多實(shí)現(xiàn)方式,從根本上說,該模式必須包含兩個角色:觀察者和被觀察者。觀察者和被觀察對象之間的互動關(guān)系不能體現(xiàn)成類之間的直接調(diào)用,那樣就將使觀察者和被觀察對象之間緊密的耦合起來,從根本上違反面向?qū)ο蟮脑O(shè)計(jì)的原則。在具體的實(shí)現(xiàn)中,我們需要面向接口編程,讓被觀察者管理觀察者對象接口類型,然后調(diào)用接口方法更新觀察者。

詳細(xì)內(nèi)容請參考《軟件秘笈:設(shè)計(jì)模式那點(diǎn)事》,祝你早日學(xué)會設(shè)計(jì)模式!

java中的單例模式的代碼怎么寫

我從我的博客里把我的文章粘貼過來吧,對于單例模式模式應(yīng)該有比較清楚的解釋:

單例模式在我們?nèi)粘5捻?xiàng)目中十分常見,當(dāng)我們在項(xiàng)目中需要一個這樣的一個對象,這個對象在內(nèi)存中只能有一個實(shí)例,這時我們就需要用到單例。

一般說來,單例模式通常有以下幾種:

1.饑漢式單例

public class Singleton {

private Singleton(){};

private static Singleton instance = new Singleton();

public static Singleton getInstance(){

return instance;

}

}

這是最簡單的單例,這種單例最常見,也很可靠!它有個唯一的缺點(diǎn)就是無法完成延遲加載——即當(dāng)系統(tǒng)還沒有用到此單例時,單例就會被加載到內(nèi)存中。

在這里我們可以做個這樣的測試:

將上述代碼修改為:

public class Singleton {

private Singleton(){

System.out.println("createSingleton");

};

private static Singleton instance = new Singleton();

public static Singleton getInstance(){

return instance;

}

public static void testSingleton(){

System.out.println("CreateString");

}

}

而我們在另外一個測試類中對它進(jìn)行測試(本例所有測試都通過Junit進(jìn)行測試)

public class TestSingleton {

@Test

public void test(){

Singleton.testSingleton();

}

}

輸出結(jié)果:

createSingleton

CreateString

我們可以注意到,在這個單例中,即使我們沒有使用單例類,它還是被創(chuàng)建出來了,這當(dāng)然是我們所不愿意看到的,所以也就有了以下一種單例。

2.懶漢式單例

public class Singleton1 {

private Singleton1(){

System.out.println("createSingleton");

}

private static Singleton1 instance = null;

public static synchronized Singleton1 getInstance(){

return instance==null?new Singleton1():instance;

}

public static void testSingleton(){

System.out.println("CreateString");

}

}

上面的單例獲取實(shí)例時,是需要加上同步的,如果不加上同步,在多線程的環(huán)境中,當(dāng)線程1完成新建單例操作,而在完成賦值操作之前,線程2就可能判

斷instance為空,此時,線程2也將啟動新建單例的操作,那么多個就出現(xiàn)了多個實(shí)例被新建,也就違反了我們使用單例模式的初衷了。

我們在這里也通過一個測試類,對它進(jìn)行測試,最后面輸出是

CreateString

可以看出,在未使用到單例類時,單例類并不會加載到內(nèi)存中,只有我們需要使用到他的時候,才會進(jìn)行實(shí)例化。

這種單例解決了單例的延遲加載,但是由于引入了同步的關(guān)鍵字,因此在多線程的環(huán)境下,所需的消耗的時間要遠(yuǎn)遠(yuǎn)大于第一種單例。我們可以通過一段測試代碼來說明這個問題。

public class TestSingleton {

@Test

public void test(){

long beginTime1 = System.currentTimeMillis();

for(int i=0;i100000;i++){

Singleton.getInstance();

}

System.out.println("單例1花費(fèi)時間:"+(System.currentTimeMillis()-beginTime1));

long beginTime2 = System.currentTimeMillis();

for(int i=0;i100000;i++){

Singleton1.getInstance();

}

System.out.println("單例2花費(fèi)時間:"+(System.currentTimeMillis()-beginTime2));

}

}

最后輸出的是:

單例1花費(fèi)時間:0

單例2花費(fèi)時間:10

可以看到,使用第一種單例耗時0ms,第二種單例耗時10ms,性能上存在明顯的差異。為了使用延遲加載的功能,而導(dǎo)致單例的性能上存在明顯差異,

是不是會得不償失呢?是否可以找到一種更好的解決的辦法呢?既可以解決延遲加載,又不至于性能損耗過多,所以,也就有了第三種單例:

3.內(nèi)部類托管單例

public class Singleton2 {

private Singleton2(){}

private static class SingletonHolder{

private static Singleton2 instance=new Singleton2();

}

private static Singleton2 getInstance(){

return SingletonHolder.instance;

}

}

在這個單例中,我們通過靜態(tài)內(nèi)部類來托管單例,當(dāng)這個單例被加載時,不會初始化單例類,只有當(dāng)getInstance方法被調(diào)用的時候,才會去加載

SingletonHolder,從而才會去初始化instance。并且,單例的加載是在內(nèi)部類的加載的時候完成的,所以天生對線程友好,而且也不需要

synchnoized關(guān)鍵字,可以說是兼具了以上的兩個優(yōu)點(diǎn)。

4.總結(jié)

一般來說,上述的單例已經(jīng)基本可以保證在一個系統(tǒng)中只會存在一個實(shí)例了,但是,仍然可能會有其他的情況,導(dǎo)致系統(tǒng)生成多個單例,請看以下情況:

public class Singleton3 implements Serializable{

private Singleton3(){}

private static class SingletonHolder{

private static Singleton3 instance = new Singleton3();

}

public static Singleton3 getInstance(){

return SingletonHolder.instance;

}

}

通過一段代碼來測試:

@Test

public void test() throws Exception{

Singleton3 s1 = null;

Singleton3 s2 = Singleton3.getInstance();

//1.將實(shí)例串行話到文件

FileOutputStream fos = new FileOutputStream("singleton.txt");

ObjectOutputStream oos =new ObjectOutputStream(fos);

oos.writeObject(s2);

oos.flush();

oos.close();

//2.從文件中讀取出單例

FileInputStream fis = new FileInputStream("singleton.txt");

ObjectInputStream ois = new ObjectInputStream(fis);

s1 = (Singleton3) ois.readObject();

if(s1==s2){

System.out.println("同一個實(shí)例");

}else{

System.out.println("不是同一個實(shí)例");

}

}

輸出:

不是同一個實(shí)例

可以看到當(dāng)我們把單例反序列化后,生成了多個不同的單例類,此時,我們必須在原來的代碼中加入readResolve()函數(shù),來阻止它生成新的單例

public class Singleton3 implements Serializable{

private Singleton3(){}

private static class SingletonHolder{

private static Singleton3 instance = new Singleton3();

}

public static Singleton3 getInstance(){

return SingletonHolder.instance;

}

//阻止生成新的實(shí)例

public Object readResolve(){

return SingletonHolder.instance;

}

}

再次測試時,就可以發(fā)現(xiàn)他們生成的是同一個實(shí)例了。

java mqtt

java mqtt是什么,讓我們一起了解一下?

MQTT是一個基于客戶端-服務(wù)器的消息發(fā)布或訂閱傳輸協(xié)議,MQTT協(xié)議是輕量、簡單、開放和易于實(shí)現(xiàn)的,如果工作在TCP或IP協(xié)議上,是為硬件性能低下的遠(yuǎn)程設(shè)備以及網(wǎng)絡(luò)狀況糟糕的情況下而設(shè)計(jì)的發(fā)布或訂閱型的消息協(xié)議。

MQTT主要應(yīng)用在哪些場合?

1、它是一種機(jī)器之間通訊 machine-to-machine (M2M)、物聯(lián)網(wǎng) Internet of Things (IoT)常用的一種輕量級消息傳輸協(xié)議。

2、適用于網(wǎng)絡(luò)帶寬較低的場合。

3、包含發(fā)布、訂閱模式,通過一個代理服務(wù)器(broker),任何一個客戶端(client)都可以訂閱或者發(fā)布某個主題的消息,然后訂閱了該主題的客戶端則會收到該消息。

實(shí)戰(zhàn)操作:模擬客戶端接收消息。 import?java.util.concurrent.ScheduledExecutorService; import?org.eclipse.paho.client.mqttv3.MqttClient; import?org.eclipse.paho.client.mqttv3.MqttConnectOptions; import?org.eclipse.paho.client.mqttv3.MqttTopic; import?org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; ? /** ?*?模擬一個客戶端接收消息 ?* ?*?@author?Unclue_liu ?*/ public?class?ClientMQTT?{ ? ????public?static?final?String?HOST?=?"tcp://192.168.1.77:1883"; ????public?static?final?String?TOPIC1?=?"pos_message_all"; ????private?static?final?String?clientid?=?"12345678"; ????private?MqttClient?client; ????private?MqttConnectOptions?options; ????private?String?userName?=?"mqtt";????//非必須 ????private?String?passWord?=?"mqtt";??//非必須 ????private?ScheduledExecutorService?scheduler; ? ????private?void?start()?{ ????????try?{ ????????????//?host為主機(jī)名,clientid即連接MQTT的客戶端ID,一般以唯一標(biāo)識符表示,MemoryPersistence設(shè)置clientid的保存形式,默認(rèn)為以內(nèi)存保存 ????????????client?=?new?MqttClient(HOST,?clientid,?new?MemoryPersistence()); ????????????//?MQTT的連接設(shè)置 ????????????options?=?new?MqttConnectOptions(); ????????????//?設(shè)置是否清空session,這里如果設(shè)置為false表示服務(wù)器會保留客戶端的連接記錄,設(shè)置為true表示每次連接到服務(wù)器都以新的身份連接 ????????????options.setCleanSession(false); ????????????//?設(shè)置連接的用戶名 ????????????options.setUserName(userName); ????????????//?設(shè)置連接的密碼 ????????????options.setPassword(passWord.toCharArray()); ????????????//?設(shè)置超時時間?單位為秒 ????????????options.setConnectionTimeout(10); ????????????//?設(shè)置會話心跳時間?單位為秒?服務(wù)器會每隔1.5*20秒的時間向客戶端發(fā)送個消息判斷客戶端是否在線,但這個方法并沒有重連的機(jī)制 ????????????options.setKeepAliveInterval(20); ????????????//設(shè)置斷開后重新連接 ????????????options.setAutomaticReconnect(true); ????????????//?設(shè)置回調(diào) ????????????client.setCallback(new?PushCallback()); ????????????MqttTopic?topic?=?client.getTopic(TOPIC1); ????????????//setWill方法,如果項(xiàng)目中需要知道客戶端是否掉線可以調(diào)用該方法。設(shè)置最終端口的通知消息 ????????????//遺囑 ????????????options.setWill(topic,?"close".getBytes(),?1,?true); ????????????client.connect(options); ????????????//訂閱消息 ????????????int[]?Qos?=?{1};//0:最多一次?、1:最少一次?、2:只有一次 ????????????String[]?topic1?=?{TOPIC1}; ????????????client.subscribe(topic1,?Qos); ? ????????}?catch?(Exception?e)?{ ????????????e.printStackTrace(); ????????} ????} ? ????public?static?void?main(String[]?args)??{ ????????ClientMQTT?client?=?new?ClientMQTT(); ????????client.start(); ? ????}

分享題目:java訂閱發(fā)布模式代碼 實(shí)現(xiàn)一個簡單的發(fā)布訂閱模式
標(biāo)題來源:http://muchs.cn/article34/hjdcse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、響應(yīng)式網(wǎng)站品牌網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、企業(yè)建站自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司