公號:碼農充電站pro
主頁:https://codeshellme.github.iojava
若是有人問你,「什麼樣的代碼是好代碼」,你會怎樣回答呢?git
我以爲回答這個問題,應該從兩個方面考慮。github
那從純代碼層面來講,什麼樣的代碼纔是好代碼呢?算法
一般會有如下幾個判斷標準:shell
好的代碼,不必定要知足以上全部的條件。但一條也不知足的代碼,基本上就不是好代碼了。編程
無規則不成方圓,寫代碼也是如此。要寫出好的代碼,須要遵照一些規則,主要有如下幾個方面:設計模式
每種設計模式都遵照了一個或多個設計原則。經常使用的設計原則有如下幾種:安全
另外在面向對象編程中,也有兩個比較重要的編程原則:架構
在編碼的過程當中,要時常想着這些原則,思考本身的代碼是否符合其中的某項或多項原則。併發
常見的設計模式有23 種,下面會詳細介紹。
編碼規範注重的是代碼細節,主要目的是讓代碼具備可讀性。總體上來講,好的代碼,對外應該有一個統一的代碼風格,代碼風格不必定有好壞之分,但必定有是否統一之別。
另外,代碼命名也很重要,大到項目命名,目錄命名,包名等。小到類名,接口名,方法名,對象名,變量名等。命名最基本的要求是用詞標準達意,讓人一看知道大概的用途是什麼。
還有,必要的地方要有必要的註釋,對於他人及本身回頭看代碼都有幫助。
隨着項目需求的增長變化,代碼結構,代碼量也都會跟着變化。代碼重構須要咱們不斷的從總體架構的角度審視整個項目代碼的結構,是否已經變得混亂無序。只有不斷的對代碼進行重構,才能使得代碼持續的具備可維護性,可讀性等標準。
通過上文,咱們已經知道了高質量代碼的標準是什麼。那麼,當咱們編寫完一部分代碼後,應該怎樣判斷本身寫的代碼是不是高質量呢?
文章開頭已經提到過,好的代碼應該從業務和純代碼兩個角度來衡量,下面咱們就從這兩個角度來看,通常要對代碼作哪些檢查?
業務角度:
從純代碼角度考慮:
當咱們完成某一階段的代碼後,能夠嘗試從以上幾點來檢查代碼是否過關。
下面主要介紹設計模式。
設計模式講的是如何編寫可擴展、可維護、可讀的高質量代碼,它是針對軟件開發中常常遇到的一些設計問題,總結出來的一套通用的解決方案。
使用設計模式,可使得咱們編寫的代碼具備一個良好的結構,從而寫出優雅的代碼。設計模式關注的是,類與類之間以及對象與對象之間如何交互。
常見的設計模式有23 種,但並非每一種模式都經常使用。這23 種設計模式可分爲3 大類,分別是:
下面介紹每類之中都包含哪些設計模式。
建立型包含5 種設計模式:
結構型包含7 種設計模式:
行爲型包含11 種設計模式:
設計模式中常常會用到UML 圖來表示類與類之間的關係,下面介紹6 種UML 規定的類關係,分別是:
各類關係之間的強弱性爲:
泛化可理解爲繼承關係。以下代碼中,類B繼承了類A。
public class A { ... } public class B extends A { ... }
泛化關係用一個實線三角箭頭表示,關係圖以下,箭頭由B 指向A,表示B繼承了A:
實現類和接口之間的關係,稱爲實現關係。
以下代碼中,類B 實現了接口A。
public interface A {...} public class B implements A { ... }
實現關係用一個虛線三角箭頭表示,關係圖以下,箭頭由B 指向A,表示B 實現了A:
聚合是一種包含關係,A 類對象包含B 類對象,B類對象的生命週期能夠不依賴A 類對象的生命週期。
以下代碼中,A 類對象包含了B 類對象。
public class A { private B b; public A(B b) { this.b = b; } }
聚合關係用一個實線空心菱形箭頭表示,關係圖以下,箭頭由B 指向A,表示A 中聚合了B:
組合是一種包含關係。A 類對象包含B 類對象,B 類對象的生命週期依賴A 類對象的生命週期,B 類對象不可單獨存在。
以下代碼中,A 類對象包含了B 類對象。
public class A { private B b; public A() { this.b = new B(); } }
組合關係用一個實線實心菱形箭頭表示,關係圖以下,箭頭由B 指向A,表示A 中組合了B:
關聯是一種很是弱的關係,包含聚合、組合兩種關係。若是B 類對象是A 類的成員變量,那麼B 類和A 類就是關聯關係。
以下兩種代碼都是關聯關係。
public class A { private B b; public A(B b) { this.b = b; } } // 或者 public class A { private B b; public A() { this.b = new B(); } }
關聯關係用一個實線箭頭表示,關係圖以下,箭頭由A 指向B,表示A 關聯B:
依賴是一種比關聯關係更弱的關係,包含關聯關係。只要B 類對象和A 類對象有任何使用關係。
以下三種代碼都是依賴關係。
public class A { private B b; public A(B b) { this.b = b; } } // 或者 public class A { private B b; public A() { this.b = new B(); } } // 或者 public class A { public void func(B b) { ... } }
依賴關係用一個虛線箭頭表示,關係圖以下,箭頭由A 指向B,表示A 依賴B:
本篇文章主要介紹了什麼是高質量代碼,如何發現代碼中的問題,以及如何編寫高質量代碼。另外重點介紹了23 種設計模式都有哪些,及每種設計模式的含義。最後介紹了設計模式中常常用到的UML 關係都有哪些。
但願本篇文章對你有所幫助,若是哪裏有任何問題也歡迎指正,謝謝!
(完。)
歡迎關注做者公衆號,獲取更多技術乾貨。