Android學習進階和IoC
1.成為Android高手一般分為六個階段:
第一階段:熟練掌握Java SE,尤其是對其內部類、線程、並發、網路編程等需要深入研究;熟練掌握基於HTTP協議的編程,清楚POST和GET等請求方式流程和細節;能夠進行基本的Java Web編程,如果能夠使用Java EE則更好;
第二階段:精通Android的核心API的使用,例如四大組件所涉及的API、Context等,精通核心界面的編程,例如ListView的編程;到達這個階段已經能夠做大部分基本的應用開發了;
第三階段:精通應用框架的原理,尤其是對IoC的理解及其在Android應用框架中的應用,精通基本的23種設計模式在Android中的應用;
第四階段:精通JNI,熟練Android類庫中C/C++組件開發;並能夠使用JNI機制把現有的C/C++組件移植成為應用框架的核心組件;具備修改和編寫自己的應用框架的能力;
第五階段:做出自己的Android系統,無論是底層還是上層都能夠了如指掌;能夠根據實際需要設計和實現比較大Android系統,例如帶領比較大的團隊做出自己的Android手機產品等;
第六階段:勢。一切的思考均進入「勢」的思考,一切都是思路問題,判斷和預測Android的形勢,引領市場,通往自由的天堂。
2. Android之IoC (Inversion of Control)
1)概念
一種設計思想。使調用者和被調用者解耦和分離,便於更改和代碼重用,便於移植。
許多應用都是由多個類通過彼此合作來實現業務邏輯,每個對象之間都相互依賴,這將導致代碼高度耦合併且難以測試、難以修改難以重用。
IoC很好的解決了該問題,它將實現組件間關係從程序內部提到外部容器來管理。也就是說由容器在運行期將組件間的某種依賴關係動態的注入組件中。控制程序間關係的實現交給了外部容器來完成。
2)案例
為了實現調用者和被調用者解耦,分離,一般是通過工廠模式實現的,下面將通過比較工廠模式和Ioc模式不同,加深理解Ioc模式。
假設有兩個類B 和 C:B作為調用者,C是被調用者。一般的做法是:
public class B{ private C comp=new C(); ......}
工廠模式實現如下:
public class B{ private C comp; private final static MyFactory myFactory = MyFactory.getInstance(); public B(){ this.comp = myFactory.createInstanceOfC(); } public void someMethod(){ this.comp.sayHello(); } }
使用Ioc依賴性注射實現Picocontainer如下:
public class B{ private C comp; public B(C comp){ this.comp = comp; } public void someMethod(){ this.comp.sayHello(); }}
//外部容器實現,控制程序間的關係。CImp類為C介面/類的一個具體實現。public class client{ public static void main( String[] args ) { DefaultPicoContainer container = new DefaultPicoContainer(); container.registerComponentImplementation(CImp.class); //向B類實現注射C類具體實現 container.registerComponentImplementation(B.class); B b = (B) container.getComponentInstance(B.class); b.someMethod(); }}
3)工廠模式和Ioc不同的特點和區別:
如上,主要區別體現在B類的代碼,如果使用Ioc,在B類代碼中將不需要嵌入任何工廠模式等的代碼,因為這些工廠模式其實還是與C有些間接的聯繫,這樣,使用Ioc徹底解耦了B和C之間的聯繫。
使用Ioc帶來的代價是:需要在客戶端或其它某處進行B和C之間聯繫的組裝。
所以,Ioc並沒有消除B和C之間這樣的聯繫,只是轉移了這種聯繫。 總之,使用Ioc模式,可以不管將來具體實現,完全在一個抽象層次進行描述和技術架構。
推薦閱讀:
※男生如何學習服裝搭配? - 思南的回答 - 知乎
※持續更新,二十四史之第一史《史記》經典100句 歡迎收藏學習
※如何培養孩子的學習興趣
※風水學習:巒頭化煞 槍煞(直衝煞)
※《醉鄉民謠》是怎樣描述堅持的?