- N +

java設計模式例子 java策略模式應用場景

java設計模式推薦哪本書籍

作為一個5年研發經驗的Java程序員,我讀過的關于設計模式的書籍是《修煉Java開發技術:在架構中體驗設計模式和算法之美》。

買了這本書之后,閑置了很長時間,而一番愁苦之后,想了既然花了錢,還是看一看的好。就這樣,每天下班看個半個小時,堅持了沒多久,就那么默默的放棄了,其中的內容不是我這種剛參加工作的渣渣能看的懂得,越看不懂的東西,越強迫自己去看,真心感覺好累。自己痛苦,書也痛苦,還是去看看從入門到放棄的好。

架構中的設計原則:單一職責原則,里式替換原則(LSP),依賴注入原則(DIP),接口分離原則(ISP),迪米特原則(LOD),開閉原則(OCP)。

23個設計模式:工廠模式,建造模式,工廠方法模式,原始模型模式,單例模式,適配器(變壓器)模式,橋梁模式,合成模式,裝飾模式,門面模式,享元模式,代理模式,責任鏈模式,命令模式,解釋器模式,迭代子模式,備忘錄模式,觀察者模式,狀態模式,策略模式,模板方法模式,訪問者模式。

每個模式都會一段辛酸淚,那些不懂時的歲月,看了一遍又一遍,讀完文字擼代碼,還是不懂,耗死了腦細胞,耗掉了黑發。在參加工作近4年之后,讀起來容易多了,每了解到一種設計模式,總會有這樣真好真方便之感。具備一定研發經驗之后,重新開始再閱讀這本書,從頭到尾,一邊思考,一邊閱讀,一邊做筆記,由于只看過一遍,收獲很有限,隨后有時間時,我將會重新去閱讀。雖然只讀過一邊,已經可以將策略模式和模板方法模式組合使用,完成ICON策略排序的的業務需求,并嘗試在其它需求中加以使用。

作者:夕陽雨晴,歡迎關注我的頭條號:偶爾美文,主流Java,為你講述不一樣的碼農生活。

java初級項目開發

1、首先要學習java的基礎知識。不要被新技術迷惑,所謂萬變不離其宗,新技術都是基于java的基礎之上,如果基礎不扎實,對于這些新技術的理解也是一知半解,學不到根源。

2、做一個java項目在學習完java的基礎知識之后,做一個java項目來鞏固一下,在項目中會發現很多問題,通過解決問題,加深基礎知識的掌握。

3、學習數據庫的基礎知識和開發應用軟件開發離不了數據庫,掌握幾種流行的數據庫:Oracle、SQLserver、MySQL等。

4、JEE基礎在這里首先要學習網站基礎,包括HTML、DHTML、JavaScript;接著要學習XML,XMLJAXP;然后學習JEE基礎,包括JEE開發環境,RMI/IIOP、JNDI;最后學習JDBC數據庫的應用開發。

5、web開發全面的JEE的web開發知識:ServletJSPjavaBeanTagLib,到這里做一個完整的web應用項目開發。

6、EJB開發包含全面的EJB知識:1)EJB入門和無狀態會話Bean;2)有狀態會話Bean;3)BMP和CMP是實體Bean;4)jms和MessageDrivenBean;5)事物和安全(JTA、JTS和JAAS);6)WebService的開發和應用;

7、開源框架的學習學習幾種現在流行的開源框架:Struts、Spring、Hibernian、Webwork等。完整的學習這些框架的開發和應用。如果有興趣還可以學習Ibati框架、AJAX技術和DWR框架的開發和應用。

8、JEE項目綜合應用JEE的知識來開發一個完整的應用。

9、面向對象分析與設計java是一種面向對象的語言,所以要深入學習面向對象的分析與設計,另外還要學習UML統一建模語言。

10、接下來就是系統設計與架構這里要學習的是Java設計模式、EJB設計模式、JEE核心設計模式、JEE應用程序框架設計。

11、軟件工程軟件工程基本理論知識的學習,還有Rup和極限編程。

12、技術研究學習搜索引擎技術:如Lucene等、工作流技術:包含Shark、JBPM等、SOA架構和應用。

13、綜合項目實戰實現一個企業級的應用。每個階段在做項目的基礎上牢固的掌握應用到的知識,只有在實際的應用中發現問題,加深所學的知識。

你們自己編寫的代碼中用到了多少設計模式

1、設計模式的六大原則

總原則:開閉原則(OpenClosePrinciple)

開閉原則就是說對擴展開放,對修改關閉。在程序需要進行拓展的時候,不能去修改原有的代碼,而是要擴展原有代碼,實現一個熱插拔的效果。所以一句話概括就是:為了使程序的擴展性好,易于維護和升級。想要達到這樣的效果,我們需要使用接口和抽象類等,后面的具體設計中我們會提到這點。

1)單一職責原則

不要存在多于一個導致類變更的原因,也就是說每個類應該實現單一的職責,如若不然,就應該把類拆分。

2)里氏替換原則(LiskovSubstitutionPrinciple)

里氏代換原則(LiskovSubstitutionPrincipleLSP)面向對象設計的基本原則之一。里氏代換原則中說,任何基類可以出現的地方,子類一定可以出現。LSP是繼承復用的基石,只有當衍生類可以替換掉基類,軟件單位的功能不受到影響時,基類才能真正被復用,而衍生類也能夠在基類的基礎上增加新的行為。里氏代換原則是對“開-閉”原則的補充。實現“開-閉”原則的關鍵步驟就是抽象化。而基類與子類的繼承關系就是抽象化的具體實現,所以里氏代換原則是對實現抽象化的具體步驟的規范。

3)依賴倒轉原則(DependenceInversionPrinciple)

這個是開閉原則的基礎,具體內容:面向接口編程,依賴于抽象而不依賴于具體。寫代碼時用到具體類時,不與具體類交互,而與具體類的上層接口交互。

4)接口隔離原則(InterfaceSegregationPrinciple)

這個原則的意思是:每個接口中不存在子類用不到卻必須實現的方法,如果不然,就要將接口拆分。使用多個隔離的接口,比使用單個接口(多個接口方法集合到一個的接口)要好。

5)迪米特法則(最少知道原則)(DemeterPrinciple)

就是說:一個類對自己依賴的類知道的越少越好。也就是說無論被依賴的類多么復雜,都應該將邏輯封裝在方法的內部,通過public方法提供給外部。這樣當被依賴的類變化時,才能最小的影響該類。

最少知道原則的另一個表達方式是:只與直接的朋友通信。類之間只要有耦合關系,就叫朋友關系。耦合分為依賴、關聯、聚合、組合等。我們稱出現為成員變量、方法參數、方法返回值中的類為直接朋友。局部變量、臨時變量則不是直接的朋友。我們要求陌生的類不要作為局部變量出現在類中。

6)合成復用原則(CompositeReusePrinciple)

原則是盡量首先使用合成/聚合的方式,而不是使用繼承。

2、常用模式簡析

1)單例模式

單例模式(SingletonPattern)是Java中最簡單的設計模式之一。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的最佳方式。這種模式涉及到一個單一的類,該類負責創建自己的對象,同時確保只有單個對象被創建。這個類提供了一種訪問其唯一的對象的方式,可以直接訪問,不需要實例化該類的對象。

2)工廠模式

工廠模式(FactoryPattern)是Java中最常用的設計模式之一。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的最佳方式。在工廠模式中,我們在創建對象時不會對客戶端暴露創建邏輯,并且是通過使用一個共同的接口來指向新創建的對象。

3)建造者模式(Builder)

建造者模式(BuilderPattern)使用多個簡單的對象一步一步構建成一個復雜的對象。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的最佳方式。一個Builder類會一步一步構造最終的對象。該Builder類是獨立于其他對象的。

4)適配器模式

適配器模式(AdapterPattern)是作為兩個不兼容的接口之間的橋梁。這種類型的設計模式屬于結構型模式,它結合了兩個獨立接口的功能。

這種模式涉及到一個單一的類,該類負責加入獨立的或不兼容的接口功能。舉個真實的例子,讀卡器是作為內存卡和筆記本之間的適配器。您將內存卡插入讀卡器,再將讀卡器插入筆記本,這樣就可以通過筆記本來讀取內存卡。

我們通過下面的實例來演示適配器模式的使用。其中,音頻播放器設備只能播放mp3文件,通過使用一個更高級的音頻播放器來播放vlc和mp4文件。

5)裝飾器模式

裝飾器模式(DecoratorPattern)允許向一個現有的對象添加新的功能,同時又不改變其結構。這種類型的設計模式屬于結構型模式,它是作為現有的類的一個包裝。

這種模式創建了一個裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。

我們通過下面的實例來演示裝飾器模式的用法。其中,我們將把一個形狀裝飾上不同的顏色,同時又不改變形狀類。

6)代理模式

在代理模式(ProxyPattern)中,一個類代表另一個類的功能。這種類型的設計模式屬于結構型模式,在代理模式中,我們創建具有現有對象的對象,以便向外界提供功能接口。

7)原型模式

原型模式(PrototypePattern)是用于創建重復的對象,同時又能保證性能。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的最佳方式。

這種模式是實現了一個原型接口,該接口用于創建當前對象的克隆。當直接創建對象的代價比較大時,則采用這種模式。例如,一個對象需要在一個高代價的數據庫操作之后被創建。我們可以緩存該對象,在下一個請求時返回它的克隆,在需要的時候更新數據庫,以此來減少數據庫調用。

8)備忘錄模式

提供了一種可以恢復狀態的機制,實現了信息的封裝,使得用戶不需要關心狀態的保存細節,不破壞封裝的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態,這樣可以在以后將對象恢復到原先保存的狀態。

9)觀察者模式

當對象間存在一對多關系時,則使用觀察者模式(ObserverPattern)。比如,當一個對象被修改時,則會自動通知它的依賴對象。觀察者模式屬于行為型模式。

10)策略模式

在策略模式(StrategyPattern)中,一個類的行為或其算法可以在運行時更改。這種類型的設計模式屬于行為型模式。在策略模式中,我們創建表示各種策略的對象和一個行為隨著策略對象改變而改變的context對象。策略對象改變context對象的執行算法。

3、總結設計模式(Designpattern)是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。毫無疑問,設計模式于己于他人于系統都是多贏的;設計模式使代碼編制真正工程化;設計模式是軟件工程的基石脈絡,如同大廈的結構一樣。

java學到什么時候開始看設計模式最合適

謝邀!java學到什么時候看設計模式最合適?我的建議是最好能有一定的Java基礎后學習,當然這里說的基礎指的是已經能簡單的小項目,比如說寫個學生成績管理系統(ps:當然不一定需要界面呈現)

為什么需要學設計模式設計模式(DesignPattern)是一套被反復使用、多數人知曉的、經過分類的、代碼設計經驗的總結。使用設計模式的目的:為了代碼可重用性、讓代碼更容易被他人理解、保證代碼可靠性。設計模式使代碼編寫真正工程化;設計模式是軟件工程的基石脈絡,如同大廈的結構一樣。

設計模式是前人從不斷實踐中總結出來的一套經驗,與語言無關,而是從代碼設計的角度上入手,目的是為了使我們的代碼更具有可維護性、可讀性、可擴展性。

咱們從Java本身語言來說,很多類的設計就充分利用了23種設計模式,這里附上我整理的一張圖:

再就從上文說到的成績管理系統來說,其總共包括以下幾個實體:

1、班級:一個老師可以管理多個班級,一個學生只能有一個班級

2、老師:負責將每個學生相應學科的成績錄入到系統中

3、學生:查看自己不同學科的成績

4、學科:一個班級有多個學科,一個學科有一個老師

那么這里構造一個班級對象,其就充分利用了好幾種設計模式:

組合模式:兩個屬性teachers和students,通過兩個add方法來添加Teacher和Student

迭代器模式:通過showStudents方法來獲取查看班級下所有學生的迭代器(ps:這里復用了Java#List的迭代器)

建造者模式:StudyClass本身是個建造者模式的實體,通過添加Teacher和Student來形成一個班級

publicclassStudyClass{privatefinalMap<Subject,Teacher>teachers;privatefinalList<Student>students;publicvoidaddTeacher(Subjectsubject,Teacherteacher){teachers.put(subject,teacher);}publicvoidaddStudent(Students){students.add(s);}publicIteratorshowStudents(){}}

所以上面的這個例子,你有發現什么嗎?其實我們在日常開發中,在不斷的應用著設計模式,早日學設計模式,能讓我們做到了解到他人寫這個代碼的設計理念,能知道背后的邏輯,而不是停留在應用的階段。

另外,同樣是寫代碼,有的人寫的代碼可讀性、可維護性極差,我們經常會看到有人在網上爆料說XX同事寫的代碼怎么怎么爛;有的人寫的代碼會讓你如浴春風,賞心悅目。

對于Java語言來說,其是一門面向對象設計的語言,而設計模式本身也是基于面向對象設計產生的,這也更具有貼合性。

再一個,如果你想成為開源項目的commiter,那么對于代碼質量這塊要求就更高了,而設計模式就像一把利劍能幫你斬殺一些爛代碼。

總之,更早的接觸設計模式,了解其背后的設計理念,會讓你的代碼質量質的增長。

每天進步一點點!我是90后IT男,日常分享原創或轉載的知識!!

有人說設計模式是為了彌補Java語言的缺陷,你覺得是這樣嗎

看你從哪個層面來看待設計模式!

語言層面

如果你從語言層面來看設計模式,那么這個說法可以說是對的。有部分設計模式是彌補了Java語言上的不足,最明顯的就是單例模式。

在Java中本身沒有提供單例對象的創建,需要通過單例模式來實現,什么餓漢式,懶漢式,多線程下還要關注DCL,volatile關鍵字等等,衍生了很多的面試題。

而在現代語言中,很多都提供了創建單例對象的語法,比如Scala,Kotlin的object關鍵字。

代碼設計層面

如果從代碼設計層面來看,設計模式提供了一套可復用的代碼結構,來解決特定問題。比如,當需要動態化某些可選部分時,可以使用策略模式。當需要一組操作來順序操作某個對象時,可以使用職責鏈模式。

架構層面

從架構層面來看,設計模式對組件關系進行了解耦。

假設我們要實現一個文件服務器,有一個UploadService來進行上傳操作,可以調用ConvertService對文件進行轉換。UploadService屬于核心模塊「上傳模塊」,而ConvertService屬于非核心模塊「轉換模塊」。

如果UploadService直接去調用ConvertService來執行轉換,那么核心模塊就依賴了非核心模塊。如下圖:

非核心模塊是相對不穩定的,核心模塊是相對穩定的。核心模塊依賴了非核心模塊會導致核心模塊也不穩定。所以可以使用策略模式來解耦:

看箭頭的方向,現在轉換模塊依賴于上傳模塊,轉換模塊的變化不會影響上傳模塊。依賴方向改變了,這就是傳說中的「依賴倒置」!

java開發中都用到了那些設計模式用在什么場合

設計模式很多,但總的來講分為4大類,creationalpatterns,通常是隱藏對象的new進程,通過專門的類來具現對象。

structuralpatterns,根據類的層次關系和接口來設計。

behavioralpatterns根據對象間的通訊來設計J2EEpatterns.重視于表現層設計每類都有很多種。JAVA戰狼班

返回列表
上一篇:
下一篇: