Java设计模式教程
課程大綱
架構(gòu)和計(jì)算機(jī)科學(xué)中的設(shè)計(jì)模式是記錄特定專業(yè)領(lǐng)域中設(shè)計(jì)問題的解決方案的正式方法。 這個(gè)想法是由建筑師Christopher Alexander在建筑領(lǐng)域引入的,并已被改編為其他各種學(xué)科,包括計(jì)算機(jī)科學(xué)。
設(shè)計(jì)模式是在軟件設(shè)計(jì)中給定上下文中對常見問題的通用可重用解決方案。 設(shè)計(jì)模式不是可以直接轉(zhuǎn)換為源代碼或機(jī)器代碼的最終設(shè)計(jì)。 它是關(guān)于如何解決可以在許多不同情況下使用的問題的描述或模板。 模式是程序員設(shè)計(jì)應(yīng)用程序或系統(tǒng)時(shí)可以用來解決常見問題的形式化最佳實(shí)踐。
在本課程中,您將深入研究大量的設(shè)計(jì)模式,并了解如何在Java中實(shí)現(xiàn)和利用它們。 您將了解模式如此重要的原因,并了解何時(shí)以及如何應(yīng)用模式中的每一個(gè)。
關(guān)于作者
Rohit Joshi是消費(fèi)品行業(yè)的軟件工程師。 他是Sun認(rèn)證的Java程序員。 他曾在與不同領(lǐng)域相關(guān)的項(xiàng)目中工作。 他還參與系統(tǒng)分析和系統(tǒng)設(shè)計(jì)。 他主要從事Core Java和J2EE技術(shù)??方面的工作,但在Javascript和Jquery等前端技術(shù)方面也有豐富的經(jīng)驗(yàn)。
經(jīng)驗(yàn)教訓(xùn)
在本課程中,您將被介紹設(shè)計(jì)模式。 您將了解什么是設(shè)計(jì)模式,為什么要在我們的代碼中使用它們,以及如何選擇和使用一種。 最后,描述了現(xiàn)有模式的分類。
通過一個(gè)真實(shí)的示例,您將學(xué)習(xí)如何以及何時(shí)使用Adapter模式,以及如何構(gòu)造代碼以實(shí)現(xiàn)它。 您將看到它可以如何為代碼問題帶來優(yōu)雅的解決方案。
Facade模式使用Facade類使復(fù)雜的界面易于使用。 外觀模式為子系統(tǒng)中的一組接口提供了統(tǒng)一的接口。 Facade定義了一個(gè)更高級別的界面,使子系統(tǒng)更易于使用。
Composite Pattern允許您將對象組合成樹狀結(jié)構(gòu)以表示整體的層次結(jié)構(gòu),這意味著您可以創(chuàng)建由不同部分組成的對象樹,但是可以將其視為一個(gè)整體。 Composite使客戶能夠統(tǒng)一對待單個(gè)對象和對象組成,這就是Composite Pattern的目的。
橋接模式的目的是將抽象與其實(shí)現(xiàn)分離,以便兩者可以獨(dú)立變化。 它將抽象和實(shí)現(xiàn)放入兩個(gè)不同的類層次結(jié)構(gòu)中,以便可以獨(dú)立地?cái)U(kuò)展兩者。
當(dāng)必須有一個(gè)類的一個(gè)實(shí)例,并且必須從眾所周知的訪問點(diǎn)訪問客戶端時(shí),或者當(dāng)可以通過子類擴(kuò)展唯一的實(shí)例,并且客戶端應(yīng)該能夠使用時(shí),才使用Singleton模式一個(gè)擴(kuò)展實(shí)例而無需修改其代碼。
觀察者模式是一種行為模式,與對象之間的職責(zé)分配有關(guān)。 當(dāng)抽象具有兩個(gè)方面,一個(gè)依賴于另一個(gè)方面,對一個(gè)對象的更改需要更改其他對象,并且您不知道需要更改多少個(gè)對象或何時(shí)一個(gè)對象應(yīng)該能夠通知另一對象時(shí),應(yīng)使用該方法。對象,而無需假設(shè)這些對象是誰。 換句話說,您不希望這些對象緊密耦合。
介體模式定義了一個(gè)對象,該對象封裝了一組對象之間的交互方式。 介體通過防止對象之間顯式地相互引用來促進(jìn)松散耦合,并且它使您可以獨(dú)立地更改它們之間的交互。 對象不是直接彼此交互,而是要求中介程序代表它們進(jìn)行交互,這導(dǎo)致可重用性和松散耦合。 您將學(xué)習(xí)如何以及何時(shí)使用Mediator設(shè)計(jì)模式,以及如何構(gòu)造代碼以實(shí)現(xiàn)它。
代理模式為另一個(gè)對象提供代理或占位符,以控制對其的訪問。 它帶來了許多不同的變化。 一些重要的變體是遠(yuǎn)程代理,虛擬代理和保護(hù)代理。 在本課程中,我們將對這些變體有更多的了解,并將使用Java來實(shí)現(xiàn)它們。 但是在我們這樣做之前,讓我們先全面了解代理模式。 您將學(xué)習(xí)如何以及何時(shí)使用代理設(shè)計(jì)模式,以及如何構(gòu)造代碼以實(shí)現(xiàn)它。
責(zé)任鏈模式是一種行為模式,其中一組對象按順序鏈接在一起,并提供一個(gè)責(zé)任(請求)以便由該組進(jìn)行處理。 如果組中的對象可以處理特定的請求,它可以處理并返回相應(yīng)的響應(yīng)。 否則,它將請求轉(zhuǎn)發(fā)到組中的后續(xù)對象。
Flyweight模式旨在控制對象的創(chuàng)建,在這些對象中,應(yīng)用程序中的對象非常相似且種類相似,并為您提供了基本的緩存機(jī)制。 它允許您為每種類型創(chuàng)建一個(gè)對象(此處的類型因該對象的屬性而異),并且如果您請求具有相同屬性(已創(chuàng)建)的對象,它將返回您相同的對象,而不是創(chuàng)建新的對象一。
構(gòu)建器模式的目的是將復(fù)雜對象的構(gòu)造與其表示分離,以便同一構(gòu)造過程可以創(chuàng)建不同的表示。 這種類型的分離減小了物體的尺寸。 事實(shí)證明,該設(shè)計(jì)具有更高的模塊化,每個(gè)實(shí)現(xiàn)都包含在不同的構(gòu)建器對象中。 添加新的實(shí)現(xiàn)(即添加新的構(gòu)建器)變得更加容易。
工廠方法模式為我們提供了一種封裝具體類型的實(shí)例的方法。 Factory Method模式封裝了在稱為工廠方法的指定方法內(nèi)部選擇和實(shí)例化適當(dāng)類所需的功能。 工廠方法根據(jù)應(yīng)用程序上下文和其他影響因素從類層次結(jié)構(gòu)中選擇適當(dāng)?shù)念悺?然后,它實(shí)例化選定的類,并將其作為父類類型的實(shí)例返回。
抽象工廠(AKA Kit)是一種設(shè)計(jì)模式,它提供了一個(gè)接口,用于創(chuàng)建相關(guān)或相關(guān)對象的族,而無需指定其具體類。 抽象工廠模式將“工廠方法模式”的概念提高到了一個(gè)新的水平。 抽象工廠是一個(gè)類,提供提供產(chǎn)生一系列對象的接口。
原型設(shè)計(jì)模式用于指定要使用原型實(shí)例創(chuàng)建的對象的種類,并通過復(fù)制此原型來創(chuàng)建新對象。 其概念是復(fù)制現(xiàn)有對象,而不是從頭開始創(chuàng)建新實(shí)例,這可能包括昂貴的操作。 現(xiàn)有對象充當(dāng)原型,并包含對象的狀態(tài)。
有時(shí)有必要記錄對象的內(nèi)部狀態(tài)。 在實(shí)施檢查點(diǎn)和“撤消”機(jī)制時(shí),這是必需的,該機(jī)制使用戶退出嘗試性操作或從錯(cuò)誤中恢復(fù)。 您必須將狀態(tài)信息保存在某處,以便可以將對象還原到其先前的狀態(tài)。 但是對象通常封裝了部分或全部狀態(tài),使得其他對象無法訪問它,并且無法在外部保存。 暴露此狀態(tài)將違反封裝,這可能會損害應(yīng)用程序的可靠性和可擴(kuò)展性。 可以使用Memento模式完成此操作,而無需暴露對象的內(nèi)部結(jié)構(gòu)。
模板設(shè)計(jì)模式是一種行為模式,顧名思義,它提供了供用戶使用的模板或算法結(jié)構(gòu)。 用戶無需改變算法的結(jié)構(gòu)即可提供自己的實(shí)現(xiàn)。 模板模式定義了操作中算法的框架,將某些步驟推遲到子類。 模板方法允許子類在不更改算法結(jié)構(gòu)的情況下重新定義算法的某些步驟。
狀態(tài)設(shè)計(jì)模式允許對象在其內(nèi)部狀態(tài)更改時(shí)更改其行為。 該對象似乎將更改其類。 可以將對象的狀態(tài)定義為在任何給定時(shí)間點(diǎn)的確切條件,具體取決于其屬性或?qū)傩缘闹怠?由類實(shí)現(xiàn)的方法集構(gòu)成其實(shí)例的行為。 只要它的屬性值發(fā)生變化,我們就說對象的狀態(tài)已發(fā)生變化。
策略設(shè)計(jì)模式似乎是所有設(shè)計(jì)模式中最簡單的,但它為代碼提供了極大的靈活性。 即使與其他設(shè)計(jì)模式結(jié)合使用,該模式也幾乎用于所有地方。 策略設(shè)計(jì)模式定義了一系列算法,將每個(gè)算法封裝在一起,并使它們可互換。 策略使算法獨(dú)立于使用該算法的客戶端而變化。
命令設(shè)計(jì)模式是一種行為設(shè)計(jì)模式,有助于將調(diào)用者與請求的接收者解耦。 命令設(shè)計(jì)模式的目的是將請求封裝為對象,從而使開發(fā)人員可以將具有不同請求,隊(duì)列或日志請求的客戶端參數(shù)化,并支持可撤銷的操作。
口譯員設(shè)計(jì)模式是一種重型模式。 這一切都是關(guān)于通過創(chuàng)建針對自己的編程語言的解釋器來組合自己的編程語言,或處理現(xiàn)有的編程語言。 給定一種語言,我們可以定義其語法的表示形式,以及使用該表示形式來解釋該語言句子的解釋器。
裝飾器設(shè)計(jì)模式的目的是動(dòng)態(tài)地將附加職責(zé)附加到對象上。 裝飾器提供了子類別的靈活替代方案,以擴(kuò)展功能。 該模式用于動(dòng)態(tài)擴(kuò)展對象的功能,而不必更改原始類的源或使用繼承。 這是通過在實(shí)際對象周圍創(chuàng)建一個(gè)稱為Decorator的對象包裝來完成的。
迭代器設(shè)計(jì)模式的目的是提供一種在不暴露其基礎(chǔ)表示的情況下順序訪問聚合對象的元素的方法。 迭代器模式允許客戶端對象以順序的方式訪問容器的內(nèi)容,而無需了解其內(nèi)容的內(nèi)部表示形式。
訪客設(shè)計(jì)模式為您提供了一種在不更改元素類的情況下,在對象上添加新操作的方法,尤其是當(dāng)操作經(jīng)常更改時(shí)。 訪客設(shè)計(jì)模式的目的是表示要對對象結(jié)構(gòu)的元素執(zhí)行的操作。 訪問者可讓您定義新操作,而無需更改其所操作元素的類。
請確保轉(zhuǎn)發(fā)此消息,讓您的社交粉絲知道!
#Java設(shè)計(jì)模式教程-免費(fèi)的超級課程! http://t.co/a6iVlNHFuE pic.twitter.com/XSeXbq4M5e
— Java Code Geeks(@javacodegeeks) ,2015年10月15日
翻譯自: https://www.javacodegeeks.com/2015/09/java-design-patterns.html
總結(jié)
以上是生活随笔為你收集整理的Java设计模式教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kodi安卓版打开黑屏(kodi安卓版)
- 下一篇: java实现细胞自动机_Java自动机实