蘇州培訓(xùn)網(wǎng) > 蘇州Linux認(rèn)證培訓(xùn)機(jī)構(gòu) > 三網(wǎng)IT
首頁 培訓(xùn)網(wǎng) 最新資訊 熱門問答

三網(wǎng)IT

免費(fèi)試聽 13013833891

您當(dāng)前的位置: 資訊首頁 > Linux認(rèn)證培訓(xùn)資訊 > 蘇州JAVA專業(yè)程序員培訓(xùn)?

蘇州JAVA專業(yè)程序員培訓(xùn)?

來源:教育聯(lián)展網(wǎng)    編輯:佚名    發(fā)布時(shí)間:2018-04-08

蘇州JAVA專業(yè)程序員培訓(xùn)

一個(gè)專業(yè)的程序員,總是把代碼的清晰性,兼容性,可移植性放在很重要的位置。他們總是**定義大量的宏,來增強(qiáng)代碼的清晰度和可讀性,而又不增加編譯后的代碼長度和代碼的運(yùn)行效率。

他們總是在編碼的同時(shí),就考慮到了以后的代碼維護(hù)和升級。甚至,只要分析百分之一的代碼后,你就會深刻地體會到,什么樣的代碼才是一個(gè)專業(yè)的程序員寫的,什么樣的代碼是一個(gè)業(yè)余愛好者寫的。

而這一點(diǎn)是任何沒有真正分析過標(biāo)準(zhǔn)代碼的人都無法體會到的。

本文會介紹一些經(jīng)典的設(shè)計(jì)模式思想:

常用設(shè)計(jì)模式

Proxy代理模式

代理模式:為其他對象提供一種代理以便控制對這個(gè)對象的訪問。

可以詳細(xì)控制訪問某個(gè)類(對象)的方法,在調(diào)用這個(gè)方法前作的前置處理(統(tǒng)一的流程代碼放到代理中處理)。調(diào)用這個(gè)方法后做后置處理。

代理模式分類:

1.靜態(tài)代理(靜態(tài)定義代理類,我們自己靜態(tài)定義的代理類。比如我們自己定義一個(gè)明星的經(jīng)紀(jì)人類)

2.動(dòng)態(tài)代理(**程序動(dòng)態(tài)生成代理類,該代理類不是我們自己定義的。而是由程序自動(dòng)生成)比較重要?。?/span>

  • JDK自帶的動(dòng)態(tài)代理

  • javaassist字節(jié)碼操作庫實(shí)現(xiàn)

  • CGLIB

  • ASM(底層使用指令,可維護(hù)性較差)

結(jié)構(gòu)組成

代理模式主要涉及到三個(gè)角色:抽象角色、代理角色、真實(shí)角色(被代理的角色)。

抽象角色:聲明真實(shí)對象和代理對象的共同接口。即真實(shí)對象和代理對象共同要實(shí)現(xiàn)的行為動(dòng)作(好比房東和中介都要能夠?qū)崿F(xiàn)租房的行為,都能把房子租給你)。

代理角色:代理角色內(nèi)部含有對真實(shí)角色的引用,從而可以去操作真實(shí)對象,同時(shí)代理對象提供與真實(shí)對象的接口,以便在任何時(shí)候都能代替真實(shí)對象。同時(shí),代理對象在執(zhí)行真實(shí)對象的操作時(shí),也能附加它自己的操作,相當(dāng)于對真實(shí)對象的封裝

真實(shí)角色:代理角色所代理的對象,亦即我們**終要引用的對象。


Factory工廠模式

工廠模式主要是為創(chuàng)建對象提供過渡接口,以便將創(chuàng)建對象的具體過程屏蔽隔離起來,達(dá)到提高靈活性的目的。

工廠模式可以分為三類:

簡單工廠模式(Simple Factory)

工廠方法模式(Factory Method)

抽象工廠模式(Abstract Factory)

這三種模式從上到下逐步抽象,并且更具一般性。GOF在《設(shè)計(jì)模式》一書中將工廠模式分為兩類:工廠方法模式(Factory Method)與抽象工廠模式(Abstract Factory)。將簡單工廠模式(Simple Factory)看為工廠方法模式的一種特例,兩者歸為一類。


區(qū)別:

工廠方法模式:

一個(gè)抽象產(chǎn)品類,可以派生出多個(gè)具體產(chǎn)品類。

一個(gè)抽象工廠類,可以派生出多個(gè)具體工廠類。

每個(gè)具體工廠類只能創(chuàng)建一個(gè)具體產(chǎn)品類的實(shí)例。

抽象工廠模式:

多個(gè)抽象產(chǎn)品類,每個(gè)抽象產(chǎn)品類可以派生出多個(gè)具體產(chǎn)品類。

一個(gè)抽象工廠類,可以派生出多個(gè)具體工廠類。

每個(gè)具體工廠類可以創(chuàng)建多個(gè)具體產(chǎn)品類的實(shí)例。

區(qū)別:

工廠方法模式只有一個(gè)抽象產(chǎn)品類,而抽象工廠模式有多個(gè)。

工廠方法模式的具體工廠類只能創(chuàng)建一個(gè)具體產(chǎn)品類的實(shí)例,而抽象工廠模式可以創(chuàng)建多個(gè)。


Singleton 單例模式

單例模式只能有一個(gè)實(shí)例。

單例類必須創(chuàng)建自己的**實(shí)例。

單例類必須向其他對象提供這一實(shí)例。

保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。

單例模式結(jié)構(gòu)圖

單例模式(Singleton)是幾個(gè)創(chuàng)建模式中**對立的一個(gè),它的主要特點(diǎn)不是根據(jù)用戶程序調(diào)用生成一個(gè)新的實(shí)例,而是控制某個(gè)類型的實(shí)例**性,**上圖我們知道它包含的角色只有一個(gè),就是Singleton,它擁有一個(gè)私有構(gòu)造函數(shù),這確保用戶無法**new直接實(shí)例它。

除此之外,該模式中包含一個(gè)靜態(tài)私有成員變量instance與靜態(tài)公有方法Instance()。Instance()方法負(fù)責(zé)檢驗(yàn)并實(shí)例化自己,然后存儲在靜態(tài)成員變量中,以確保只有一個(gè)實(shí)例被創(chuàng)建。

使用Singleton模式有一個(gè)必要條件:在一個(gè)系統(tǒng)要求一個(gè)類只有一個(gè)實(shí)例時(shí)才應(yīng)當(dāng)使用單例模式。反之,如果一個(gè)類可以有幾個(gè)實(shí)例共存,就不要使用單例模式。

不要使用單例模式存取全局變量。這違背了單例模式的用意,**放到對應(yīng)類的靜態(tài)成員中。

不要將數(shù)據(jù)庫連接做成單例,因?yàn)橐粋€(gè)系統(tǒng)可能會與數(shù)據(jù)庫有多個(gè)連接,并且在有連接池的情況下,應(yīng)當(dāng)盡可能及時(shí)釋放連接。Singleton模式由于使用靜態(tài)成員存儲類實(shí)例,所以可能會造成資源無法及時(shí)釋放,帶來問題。


Delegate 委派模式

委派模式(Delegate)是面向?qū)ο笤O(shè)計(jì)模式中常用的一種模式。這種模式的原理為類B和類A是兩個(gè)互相沒有任何關(guān)系的類,B具有和A一模一樣的方法和屬性;并且調(diào)用B中的方法,屬性就是調(diào)用A中同名的方法和屬性。

B好像就是一個(gè)受A授權(quán)委托的中介。第三方的代碼不需要知道A的存在,也不需要和A發(fā)生直接的聯(lián)系,**B就可以直接使用A的功能,這樣既能夠使用到A的各種公能,又能夠很好的將A保護(hù)起來了。

委派模式的優(yōu)點(diǎn):

  • 單一一個(gè)類無法表現(xiàn)復(fù)雜的設(shè)計(jì)

  • 設(shè)計(jì)拆分

  • 方便重用

  • 相對獨(dú)立

  • 功能定義清晰,行為界面分離

  • 松散耦合,容易擴(kuò)展


strategy 策略模式

定義一系列的算法,把每一個(gè)算法封裝起來, 并且使它們可相互替換。本模式使得算法可獨(dú)立于使用它的客戶而變化。也稱為政策模式(Policy)。(Definea family of algorithms,encapsulate each one, andmake them interchangeable. Strategy lets the algorithmvary independently from clients that use it. )

策略模式把對象本身和運(yùn)算規(guī)則區(qū)分開來,其功能非常強(qiáng)大,因?yàn)檫@個(gè)設(shè)計(jì)模式本身的核心思想就是面向?qū)ο缶幊痰亩嘈涡缘乃枷搿?/span>


當(dāng)存在以下情況時(shí)使用Strategy模式

許多相關(guān)的類僅僅是行為有異。 “策略”提供了一種用多個(gè)行為中的一個(gè)行為來配置一個(gè)類的方法。即一個(gè)系統(tǒng)需要?jiǎng)討B(tài)地在幾種算法中選擇一種。

需要使用一個(gè)算法的不同變體。例如,你可能會定義一些反映不同的空間 /時(shí)間權(quán)衡的算法。當(dāng)這些變體實(shí)現(xiàn)為一個(gè)算法的類層次時(shí) ,可以使用策略模式。

算法使用客戶不應(yīng)該知道的數(shù)據(jù)。可使用策略模式以避免暴露復(fù)雜的、與算法相關(guān)的數(shù)據(jù)結(jié)構(gòu)。

一個(gè)類定義了多種行為 , 并且這些行為在這個(gè)類的操作中以多個(gè)條件語句的形式出現(xiàn)。將相關(guān)的條件分支移入它們各自的Strategy類中以代替這些條件語句。


Prototype 原型模式

原型模式的主要思想是基于現(xiàn)有的對象克隆一個(gè)新的對象出來,一般是有對象的內(nèi)部提供克隆的方法,**該方法返回一個(gè)對象的副本,這種創(chuàng)建對象的方式,相比我們之前說的幾類創(chuàng)建型模式還是有區(qū)別的,之前的講述的工廠模式與抽象工廠都是**工廠封裝具體的new操作的過程,返回一個(gè)新的對象,有的時(shí)候我們**這樣的創(chuàng)建工廠創(chuàng)建對象不值得,特別是以下的幾個(gè)場景的時(shí)候,可能使用原型模式更簡單也效率更高。

當(dāng)一個(gè)系統(tǒng)應(yīng)該獨(dú)立于它的產(chǎn)品創(chuàng)建、構(gòu)成和表示時(shí),要使用 Prototype模式

當(dāng)要實(shí)例化的類是在運(yùn)行時(shí)刻指定時(shí),例如,**動(dòng)態(tài)裝載;

為了避免創(chuàng)建一個(gè)與產(chǎn)品類層次平行的工廠類層次時(shí)

當(dāng)一個(gè)類的實(shí)例只能有幾個(gè)不同狀態(tài)組合中的一種時(shí)。建立相應(yīng)數(shù)目的原型并克隆它們可能比每次用合適的狀態(tài)手工實(shí)例化該類更方便一些。(也就是當(dāng)我們在處理一些對象比較簡單,并且對象之間的區(qū)別很小,可能只是很固定的幾個(gè)屬性不同的時(shí)候,可能我們使用原型模式更合適)。



Template 模板模式

模板方法模式是一種類的行為型模式,在它的結(jié)構(gòu)圖中只有類之間的繼承關(guān)系,沒有對象關(guān)聯(lián)關(guān)系。

板方法模式是基于繼承的代碼復(fù)用基本技術(shù),模板方法模式的結(jié)構(gòu)和用法也是面向?qū)ο笤O(shè)計(jì)的核心之一。在模板方法模式中,可以將相同的代碼放在父類中,而將不同的方法實(shí)現(xiàn)放在不同的子類中。

在模板方法模式中,我們需要準(zhǔn)備一個(gè)抽象類,將部分邏輯以具體方法以及具體構(gòu)造函數(shù)的形式實(shí)現(xiàn),然后聲明一些抽象方法來讓子類實(shí)現(xiàn)剩余的邏輯。不同的子類可以以不同的方式實(shí)現(xiàn)這些抽象方法,從而對剩余的邏輯有不同的實(shí)現(xiàn),這就是模板方法模式的用意。模板方法模式體現(xiàn)了面向?qū)ο蟮闹T多重要思想,是一種使用頻率較高的模式。


模板方法應(yīng)用于下列情況:

一次性實(shí)現(xiàn)一個(gè)算法的不變的部分,并將可變的行為留給子類來實(shí)現(xiàn)。

各子類中公共的行為應(yīng)被提取出來并集中到一個(gè)公共父類中以避免代碼重復(fù)。首先識別現(xiàn)有代碼中的不同之處,并且將不同之處分離為新的操作。**后,用一個(gè)調(diào)用這些新的操作的模板方法來替換這些不同的代碼。全文中源碼分析可以在群619881427免費(fèi)學(xué)習(xí)。感興趣的可以加入進(jìn)來。

控制子類擴(kuò)展。模板方法只在特定點(diǎn)調(diào)用“ hook”操作 ,這樣就只允許在這些點(diǎn)進(jìn)行擴(kuò)展。



咨詢聯(lián)系方式:13861302024(楊老師)或者QQ:2589245390 還可以直接在線咨詢

更多JAVA課程推薦:

蘇州JAVA培訓(xùn)網(wǎng)

蘇州JAVA軟件培訓(xùn)

蘇州三網(wǎng)IT教育培訓(xùn)

蘇州其然軟件開發(fā)培訓(xùn)

上一篇:蘇州2018年JAVA發(fā)展前景? 下一篇:昆山思科安全認(rèn)證_昆山思科認(rèn)證培訓(xùn)
蘇州Linux認(rèn)證

免費(fèi)體驗(yàn)課開班倒計(jì)時(shí)

11: 41: 09

稍后會有專業(yè)老師給您回電,請保持電話暢通

咨詢電話:13013833891
推薦機(jī)構(gòu) 全國分站 更多課程

今日已有25人申請,本月限額500

申請?jiān)嚶犆~

QQ:1413838287
加盟合作:0755-83654572