public class StudyClass { private final Map<Subject , Teacher> teachers; private final List<Student> students; public void addTeacher(Subject subject , Teacher teacher){teachers.put(subject,teacher);} public void addStudent(Student s){students.add(s);} public Iterator showStudents(){}}
設計模式是前人從不斷實踐中總結出來的一套經驗,與語言無關,而是從程式碼設計的角度上入手,目的是為了使我們的程式碼更具有可維護性、可讀性、可擴充套件性。
咱們從Java本身語言來說,很多類的設計就充分利用了23種設計模式,這裡附上我整理的一張圖:
再就從上文說到的成績管理系統來說,其總共包括以下幾個實體:
1、班級:一個老師可以管理多個班級,一個學生只能有一個班級
2、老師:負責將每個學生相應學科的成績錄入到系統中
3、學生:檢視自己不同學科的成績
4、學科:一個班級有多個學科,一個學科有一個老師
那麼這裡構造一個班級物件,其就充分利用了好幾種設計模式:
組合模式:兩個屬性teachers和students,透過兩個add方法來新增Teacher和Student
迭代器模式:透過showStudents方法來獲取檢視班級下所有學生的迭代器(ps:這裡複用了Java#List的迭代器)
建造者模式:StudyClass本身是個建造者模式的實體,透過新增Teacher和Student來形成一個班級
public class StudyClass { private final Map<Subject , Teacher> teachers; private final List<Student> students; public void addTeacher(Subject subject , Teacher teacher){teachers.put(subject,teacher);} public void addStudent(Student s){students.add(s);} public Iterator showStudents(){}}所以上面的這個例子,你有發現什麼嗎?其實我們在日常開發中,在不斷的應用著設計模式,早日學設計模式,能讓我們做到了解到他人寫這個程式碼的設計理念,能知道背後的邏輯,而不是停留在應用的階段。
另外,同樣是寫程式碼,有的人寫的程式碼可讀性、可維護性極差,我們經常會看到有人在網上爆料說XX同事寫的程式碼怎麼怎麼爛;有的人寫的程式碼會讓你如浴春風,賞心悅目。
對於Java語言來說,其是一門面向物件設計的語言,而設計模式本身也是基於面向物件設計產生的,這也更具有貼合性。
再一個,如果你想成為開源專案的commiter,那麼對於程式碼質量這塊要求就更高了,而設計模式就像一把利劍能幫你斬殺一些爛程式碼。
總之,更早的接觸設計模式,瞭解其背後的設計理念,會讓你的程式碼質量質的增長。