S - Single-responsiblity Principle(單一職責原則)A class should have one and only one reason to change, meaning that a class should have only one job. (一個類只應該做一件事)偏窝,讓一個方法或者類的職責盡可能的單一抵代。一個方法的職責單一很容易做到侍筛。
ex: 這是一個不好的實踐志鹃,違反了單一的職責,在這個計算面積的方法左电,計算兩個不同形狀的面積殊鞭。所以違反了simple responsibility principle(SRP)画侣。
正確的實踐方法是將計算每個不同形狀方法都分開备埃,如下所示
這樣寫出來的方法就很純粹都只干一件事情姓惑,也就是計算對應形狀的面積。
對于一個類來說按脚,也需要遵守SRP原則于毙,原則如何遵守呢,如果一個類中的private方法過多的話辅搬,就可以整理一下這些private方法是否是和當前的類所做的事情保持一致唯沮,否則的話可以把這些方法抽出來到一個單獨的類中。
O - Open-Closed Principle(開閉原則)
開閉原則的定義是:對象或實體應該對擴展開放堪遂,對修改關閉介蛉。通俗的來講,當業(yè)務發(fā)生變化的時候溶褪,不需要修改原有的方法的存在邏輯币旧。只需要將添加一個新的方法或者新的類來擴展新的功能。還是拿計算不同形狀來舉舉例子竿滨,如果把計算不同形狀的都雜糅在一個if else的block中佳恬,現(xiàn)在的方法是可以計算square和circle,如果在未來的需求中于游,我們還需要計算橢圓形的話毁葱,就需要繼續(xù)添加if else block,這是個很不好實踐贰剥。無論是對于測試還是倾剿,后續(xù)功能的擴展。
什么樣的實踐是一個比較好實踐呢蚌成,我們可以使用策略模式來代替if else block前痘,首先定義一個接口,公開暴露給別人担忧,外界只需要知道這個接口可以計算不同的類型形狀的面積芹缔,需要告訴這個接口,我們要計算的形狀是什么就行了
對于新的Area calculator瓶盛,直接加一個新的類實現(xiàn)這個形狀計算的接口即可最欠,不需要改變原有邏輯,直接擴展就即可惩猫。
L - Liskov Substitution Principle(Liskov替換原則)
I - Interface Segregation Principle(接口隔離原則)
D - Dependency Inversion Principle(依賴倒置原則)