設計模式六大原則----------單一職責原則

設計模式總覽


單一職責原則,顧名思義,就是一個類只有一個職責。那麼這個職責到底是什麼意思呢?它可以被理解爲“引起變化的原因”。如果一個類有一個以上的職責,這些職責就耦合在了一起。這會導致脆弱的設計。當一個職責發生變化時,可能會影響其它的職責。另外,多個職責耦合在一起,會影響複用性。


什麼叫“引起變化的原因”?舉個例子:有三隻貓:白貓、黑貓、花貓。如果以編程的角度來看,是不是就要有三個類,白貓類,黑貓類,花貓類呢?當然不是!這裏不同的只是貓的顏色,並且這個顏色還會拓展,以後可能有藍貓;那麼在這裏,顏色就是引起變化的原因。設計時,將顏色視爲一個抽象角度,對其進行抽象。


引起變化的原因: 對象中,變化(不同)的部分,和以後有可能會拓展的部分。


然而,在現實的設計中,很難做到所有的類都實現單一職責原則。所以一般這樣規定:接口一定要實現單一職責原則;類儘量做到單一職責。

結合抽象來看,每一個職責對應的應該就是一個獨立的、最小粒度的抽象角度。

舉個例子:對蘋果、香蕉、葡萄、橘子抽象。

分析:雖然他們都是水果,但還是有不同點的。首先,他們的外觀不同,那麼這個外觀就是一個“引起變化的原因”,即職責;那麼我們就要對應的的抽象出一個外觀接口。然後,味道也不同;那麼味道就是它的第二個職責。成分也不同,那麼成分就是第三個職責。以此類推,找出所有的職責,然後將這些職責“組合”在一起,就成了水果類了。



到這裏基本已經實現了單一職責了,雖然Fruit並非單一職責,但畢竟是面向接口編程,只有接口對外可見。若想將Fruit也分解,可以採用下面的方案:



發佈了119 篇原創文章 · 獲贊 18 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章