java-面向對象-接口-抽象類 - 动态 详情
- 背景:最近接觸netty以及自己寫"包一層"的設計,包一層 是指在原生netty的api上再包一層api,稱作項目common,因為項目是對接不同上游,所以才做的common,有了一些理解和想法
- 理解:為什麼有時候既要有接口,又要有該接口的抽象類:接口的抽象性更強,適應變化性也更強,抽象類就多了一些成員變量,默認方法實現,模板方法等,這些都是不可變的,變化性不那麼強.之所以兩者都保留, 目的就像星爺電影裏鰲拜的台詞:我全都要.變化強的我要, 有默認代碼的我也要,至於實際對接的時候用哪個,哪個合適用哪個,當接口都不合適的時候,可能就要在接口的地方做改動,增加接口/修改接口/合併接口等等.另外,在設計的時候,如果一個成員變量或者參數的類型,可以寫成接口,也可以寫成實現該接口的抽象類, 那就寫成接口,前提是這個接口和抽象類是自己設計時自定義的.如果時API裏的,比如Thread和Runnable,這就屬於實際使用範疇了,哪個合適用哪個.如果是個線程,就可以不用Runnable,可以用一個抽象類繼承Thread,然後用這個抽象類.
- 為什麼要包一層:我感覺,好像是讓開發簡化底層框架的理解,或者説省去對底層邏輯的理解,就拿netty來説,理解底層的不多,那麼就可以讓少部分理解netty的人寫一個"包一層"的代碼,然後不理解netty的也可以使用了,就像spring一樣.spring,我理解是工具+包一層,包的是攔截器/過濾器/aop/代理,工具是依賴注入,bean容器
- 關於一層一層的接口/抽象類,也就是接口之間的相互繼承,抽象類之間的相互繼承,抽象類實現接口,為什麼:為了把功能點細化,為什麼要細化:為了用起來方便.舉個例子:杯子,有各種各樣的,有偏男性的,有偏女性的,有無關性別的,材質有金屬的,陶瓷的,竹子的木頭的,有保温的,不保温的,插電加熱的,插電製冷的,插電攪拌的,帶吸管的,不帶吸管的,帶把兒的,不帶把兒的,但在面向對象設計的時候,就需要先有一個杯子的接口,接口裏必須要有接收倒水方法和拿起杯子和往外出水方法.然後再由抽象杯子:有屬性:材質,是否可插電等等.代碼中的實際例子就是java中的stream和reader/writer