接口隔离原则原理讲解-coding
生活随笔
收集整理的這篇文章主要介紹了
接口隔离原则原理讲解-coding
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們先看一下他的定義,用多個專門的接口,而不使用單一的子接口,客戶端不應該依賴他不需要使用的接口,那這個定義也比較好理解,在我們后面一起coding的時候也會很容易的理解他,我們接下來看一些需要注意的點,那這個要注意的點就是,一個類對一個類的依賴應該建立在最小的接口上,也就是說我有一個大接口,里面有很多很多方法,那我們用一個類來實現這個接口的話,所有的方法都要實現,那這里面所說的類,是一個泛指,例如說一個interface,那他也是一個類,接著來看,建立單一接口,不要建立龐大臃腫的接口,盡量細化接口,接口中的方法盡量少,那緊接著我們來看一下接口隔離原則中最重要的一個點
那就是適度原則,一定要適度,那我們剛剛也說了,接口中的方法盡量少,但是要有限度,那我們對接口進行細化,肯定是可以提高程序設計的靈活性,但是如果接口設計的過小,也就是里面的方法過少,就會造成接口數量過多,提高整個程序設計復雜性,所以一定要適度,那我們接著來看他的優點是什么呢,符合我們常說的高內聚低耦合的設計思想,從而使得類有很好的可讀性,可擴展性和可維護性,那我們平時在設計接口的時候,只要暴露類給需要調用的方法,他不需要的方法我們得隱藏起來,只要專注的給一個模塊提供好,才能建立最小的依賴關系,那這個就從一定程度上減少耦合,降低依賴關系,減少耦合,提高內聚怎么理解呢,減少對外的交互,是接口中更少的方法去完成,這個就是高內聚的一個體現,那我們利用接口隔離原則,一定要適度,這里強調一下,一定要適度,那接口設計的過大或者過小都不太好,所以我們在設計接口的時候,要多花點時間去籌劃,才能準確的實現這個原則,那在實際的開發項目當中,在實現接口隔離原則的時候,我們也要考慮業務模型,包括以后會發生變更的時間,這些還要做一些預判,所以對于抽象我們的業務模型,是非常重要的,解析來一起來coding
只要實現IAnimalAction,Bird和Dog是平級的
我們來看新的寫法,同級別的接口有很多,Dog實現了IEatAnimalAction的eat方法,實現了ISwinAnimalAction的swin方法,我們的實現類相對于第一種寫法顯得更為靈活了,同時對接口進行了隔離,因為細粒度是可以組裝的,粗粒度是不可以拆分的,剛剛我們講了單一職責原則,和接口隔離原則,和那個是不是很像呢,那這里面說明一下,他們的區別,單一職責原則是指類接口,方法的職責是單一的,強調的是職責,也就是說在一個接口里,只要職責是單一的,有多個方法也可以,有10個方法,20個方法,吃,對應的有很多吃法,例如游泳可以狗刨,那游泳的方式也有很多,那接口隔離原則注重的是接口,依賴的隔離,注意我們這幾個接口已經隔離開了,單一職責注重的是類,接口,和方法,針對的是程序中的細節,而接口隔離原則,主要約束的是接口,是針對抽象,針對程序,整體框架的一個構建,這里面我們實際開發中,請注意一些點,接口盡量小沒有問題,但是要有限度,如果太小的話,那接口數量過多,設計也會變得更復雜,所以整體設計原則,包括后面講的設計模式,其實我們在實際使用的時候,要選擇一定的平衡,另外一個要注意的點,就是提高內聚,減少對外的交互,接口用最少的方法去完成,那利用接口隔離原則還需要重申一遍,一定要適度,接口設計的過大或者過小,都不好,所以在設計接口的時候,在抽象的時候,只有多花一點時間,去思考,才能準確的實現這一個原則,另外要強調的一個是,接口是設計時對外部的契約,那我們通過IAnimalAction,實現成三個不同的AnimalAction,預防外來的一個擴展,提高了我們系統的靈活性,和可維護性,那接口隔離原則,比較簡單,希望大家通過這個例子來體會一下
package com.learn.design.principle.interfacesegregation;/*** 動物的一個行為* 動物有很多的行為* * 接口還可以進一步的細化* 然后通過實現來實現多個接口* 來進行編寫* 這個就是接口隔離原則的體現* * * @author Leon.Sun**/
public interface IAnimalAction {/*** 比如吃* */void eat();/*** 飛*/void fly();/*** 游泳* */void swim();}
package com.learn.design.principle.interfacesegregation;/*** 我們寫一個Dog* 來實現IAnimalAction* 首先狗吃是沒有問題的* 狗的游泳也是沒有問題的* 那狗會飛嗎* 狗不會飛* 但是我們實現的接口fly* 是必須得寫的* * 他可以游泳* 他也可以吃* 實現這兩個接口* 我們來看一下* 那么如果這么寫的話* Dog是不需要寫Fly實現的* 只需要寫eat和swin的實現就可以* 我們來看一下類圖* * * @author Leon.Sun**/
public class Dog implements ISwimAnimalAction,IEatAnimalAction {@Overridepublic void eat() {}@Overridepublic void swim() {}
}
package com.learn.design.principle.interfacesegregation;/*** Bird實現IAnimalAction* 那鳥肯定都會吃* 飛不一定* 比如鴕鳥就不會飛* 游泳也不一定* 有的鳥會游泳* 有的鳥就不會游泳* 那例如企鵝* 企鵝也算鳥類* 他呢會游泳* 但是不會飛* 所以在Bird的實現里面* 還是有一些方法* 只能是空的實現放在這里面* 那我們的實際開發過程中* 也經常能碰到這樣的情況* 對于一個接口* 里面實現的東西過多* 并且是不同類型的* * * * @author Leon.Sun**/
public class Bird implements IAnimalAction {@Overridepublic void eat() {}@Overridepublic void fly() {}@Overridepublic void swim() {}
}
package com.learn.design.principle.interfacesegregation;/*** * @author Leon.Sun**/
public interface IFlyAnimalAction {/*** 有一個方法是fly*/void fly();
}
package com.learn.design.principle.interfacesegregation;/*** * @author Leon.Sun**/
public interface IEatAnimalAction {/*** 一個吃的方法* */void eat();
}
package com.learn.design.principle.interfacesegregation;/*** 首先它可以游泳* * @author Leon.Sun**/
public interface ISwimAnimalAction {/*** 他可以游泳* */void swim();
}
?
總結
以上是生活随笔為你收集整理的接口隔离原则原理讲解-coding的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单一职责原理讲解coding
- 下一篇: 简单工厂讲解