編輯:關於Android編程
我的女朋友小肉是一名光榮的輔導班老師,說來慚愧,我上初中那會兒最討厭輔導班老師了,每天上學都這麼累了,晚上還得去見輔導班老師,神煩,奈何目前的教育機制下,很多家長認為輔導班是提高成績比較靠譜的方式,導致這個行業市場很大。
小肉教三個水平不同的小班,那天看她在准備講義和試題,同一章內容需要做三份,其中很多內容都是重復的,自诩設計模式略懂一二的我跟她說:
你這個講義跟我敲代碼很像,相似的內容這麼多,直接復制粘貼容易出問題啊,還不如把公共的部分提一個接口,然後讓三種水平的講義都實現這個接口
比如這樣:
教案接口,指定所有班級要做的事:
/** * 教案接口,指定共同內容 */ public interface TeachingPlanImpl { /** * 教授基礎知識 */ void teachBaseKnowledge(); /** * 教授拓展知識 */ void teachExtraKnowledge(); /** * 教授拔高知識 */ void teachComplexKnowledge(); /** * 布置簡單作業 */ void assignBaseHomeWork(); /** * 布置提升作業 */ void assignExtraHomeWork(); /** * 布置復雜作業 */ void assignComplexHomeWork(); }
然後讓三個班級的講義實現這個接口:
/** * 基礎班教案 * Created by zhangshixin on 8/15/2016. */ public class TeachPlanBase implements TeachingPlanImpl { @Override public void teachBaseKnowledge() { } @Override public void teachExtraKnowledge() { } @Override public void teachComplexKnowledge() { } @Override public void assignBaseHomeWork() { } @Override public void assignExtraHomeWork() { } @Override public void assignComplexHomeWork() { } } //其余兩個拔高班 TeachPlanExtra 、奧數班 TeachPlanComplex 教案類似,不再列舉
這樣你有需要改動的時候修改一處就好了,多省勁啊哈哈(得意臉)
沒想到肉肉說:
可是普通班的孩子只要掌握基礎就好了啊,他們要是發現自己不會的那麼多該多難受 T.T 。基礎班的只要基礎知識和題,拓展班也不需要做奧數啊。而且哦,萬一我的模板教案打錯了,一下次還影響了三個班級的孩子。
沒有好處反而有可能帶來壞處,我覺得你設計的不好!
.
你!! 好吧,我竟無言以對
抽象、封裝,不是要把公共的都提出去嗎?帶著疑問我開始求醫問藥,直到發現了:
定義:
客戶端不應該依賴它不需要的接口;一個類對另一個類的依賴應該建立在最小的接口上。
接口應該是內聚的,應該避免“胖”接口。一個類對另外一個類的依賴應該建立在最小的接口上,不要強迫依賴不用的方法,這是一種接口污染。
接口存在就是為了把細節和抽象分離開來,但是如果一個接口抽象的內容太多,其實就等於沒有抽象。一個過於臃腫的接口會給它的實現類帶來很多壓力,比如上述例子講的教案問題,對胖接口的修改會影響到很多實現類,有時候可能會帶來大麻煩。
正確的方法是將胖接口分割成幾個小接口,因材施教,不要給客戶端暴露不需要的接口。
這裡比較糾結的是接口究竟怎麼算大,怎麼算小,接口隔離原則也沒有告訴我們,我們需要注意的就是接口的實現類盡量少實現不需要的方法,至於那個度還需要自己把握。
之前我在 《Windows下Qt 5.2 for Android開發入門》一文中介紹了 Windows 下 Qt on Android 開發環境的搭建,略過了 Andro
2016裡約奧運會馬上就要開始了,QQ新推出了一個有趣的ar火炬傳遞功能,讓所有人都可以體驗點亮火炬的樂趣,非常受大眾的歡迎,但是也有人反映,在qq火炬傳遞
格式塔原理介紹Material Design 運用了格式塔原理,尤其是在圖形的設計上。 格式塔理論是心理學中為數不多的理性心理學之一。格式塔學派以某些相當抽象的,與知覺和
這是對ListView上拉加載的一個簡單封裝繼承自ListView,同時提供加載接口原理就是通過對FooterView的控制實現上劃加載的效果public class L