謝邀!java學(xué)到什么時候看設(shè)計模式最合適?我的建議是最好能有一定的Java基礎(chǔ)后學(xué)習(xí),當然這里說的基礎(chǔ)指的是已經(jīng)能簡單的小項目,比如說寫個學(xué)生成績管理系統(tǒng)(ps:當然不一定需要界面呈現(xiàn))
為什么需要學(xué)設(shè)計模式
設(shè)計模式(DesignPattern)是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類的、代碼設(shè)計經(jīng)驗的總結(jié)。使用設(shè)計模式的目的:為了代碼可重用性、讓代碼更容易被他人理解、保證代碼可靠性。設(shè)計模式使代碼編寫真正工程化;設(shè)計模式是軟件工程的基石脈絡(luò),如同大廈的結(jié)構(gòu)一樣。
設(shè)計模式是前人從不斷實踐中總結(jié)出來的一套經(jīng)驗,與語言無關(guān),而是從代碼設(shè)計的角度上入手,目的是為了使我們的代碼更具有可維護性、可讀性、可擴展性。
咱們從Java本身語言來說,很多類的設(shè)計就充分利用了23種設(shè)計模式,這里附上我整理的一張圖:
再就從上文說到的成績管理系統(tǒng)來說,其總共包括以下幾個實體:
1、班級:一個老師可以管理多個班級,一個學(xué)生只能有一個班級
2、老師:負責將每個學(xué)生相應(yīng)學(xué)科的成績錄入到系統(tǒng)中
3、學(xué)生:查看自己不同學(xué)科的成績
4、學(xué)科:一個班級有多個學(xué)科,一個學(xué)科有一個老師
那么這里構(gòu)造一個班級對象,其就充分利用了好幾種設(shè)計模式:
publicclassStudyClass{
privatefinalMap<Subject,Teacher>teachers;
privatefinalList<Student>students;
publicvoidaddTeacher(Subjectsubject,Teacherteacher){teachers.put(subject,teacher);}
publicvoidaddStudent(Students){students.add(s);}
publicIteratorshowStudents(){}
}
所以上面的這個例子,你有發(fā)現(xiàn)什么嗎?其實我們在日常開發(fā)中,在不斷的應(yīng)用著設(shè)計模式,早日學(xué)設(shè)計模式,能讓我們做到了解到他人寫這個代碼的設(shè)計理念,能知道背后的邏輯,而不是停留在應(yīng)用的階段。
另外,同樣是寫代碼,有的人寫的代碼可讀性、可維護性極差,我們經(jīng)常會看到有人在網(wǎng)上爆料說XX同事寫的代碼怎么怎么爛;有的人寫的代碼會讓你如浴春風(fēng),賞心悅目。
對于Java語言來說,其是一門面向?qū)ο笤O(shè)計的語言,而設(shè)計模式本身也是基于面向?qū)ο笤O(shè)計產(chǎn)生的,這也更具有貼合性。
再一個,如果你想成為開源項目的commiter,那么對于代碼質(zhì)量這塊要求就更高了,而設(shè)計模式就像一把利劍能幫你斬殺一些爛代碼。
總之,更早的接觸設(shè)計模式,了解其背后的設(shè)計理念,會讓你的代碼質(zhì)量質(zhì)的增長。
每天進步一點點!我是90后IT男,日常分享原創(chuàng)或轉(zhuǎn)載的知識!!