Android學習 View與Composite模式應用

來源:互聯網
上載者:User

一 Composite模式

將對象組合成樹形結構以表示“部分——整體”的階層。

Composite使得使用者對單個對象操作和組合對象的操作使用具有一致性。

   

      

  這裡面涉及到單個對象和組合對象的操作問題。

  將單個對象和組合對象一致的對待能使:客戶代碼一致簡單,

使用更加靈活多變,便於擴充新的組合對象,便於對象的管理等。

  統一對待單個對象和組合對象,勢必要提供一些組合對象需要而單個對象不需要的操作或者屬性等管理手段,

這些手段對與單個對象或許根本不存在或者不適用,這樣勢必存在著一定風險隱患,造成不安全因素的存在。

  但是單個對象和組合對象必然存在一些不同的地方,要將單個對象與組合對象一致對待,

是在安全性與透明性中選擇了透明性。如果選擇安全性,那麼單個對象與組合對象是要進行區別對待。

進行怎麼樣的區別對待呢,這個不確定性很多但是可以確定是組合對象存在著如何對子物件進行管理。

  下面學習一下Android中View類階層。

二 Android中View管理

       Adnroid中用於顯示的控制項的基類是View,很多基本的控制項Widget如:

ImageView,TextView等都是直接從view派生下來;另一些支援組合的控制項都是ViewGroup派生下來。

控制項類層次關係如:

      

    

所以在Android中View的所使用組合模式中對於單個對象和組合對象是部分區別對待的:

單個對象都是從View派生下來或者再繼續派生;組合對象都是從ViewGroup派生下來才能接收單個對象。

但是這個區別僅限於單個對象還是組合對象,但終究仍然都是View。所以是部分區別對待的。

  下面簡單學習一下ViewGroup對於其子物件的管理。

三 ViewGroup對於子物件的管理

  ViewGroup是一個抽象類別,用來管理下一層的Views包括基本控制項和群組控制項——控制項的容器。

常見從ViewGroup繼承下來的有:五大布局分別是:FrameLayout(架構布局),LinearLayout (線性布局),

AbsoluteLayout(絕對布局),RelativeLayout(相對布局),TableLayout(表格版面配置).以及 ListView,GridView等等。

  ViewGroup對子類的管理看似比較簡單,使用了一個數組來管理。

  ViewGroup類中有一個成員:private View[] mChildren;用來儲存其上所有的子物件;

初始大小為12超過遺棄重新申請,這可能就是利用Java記憶體管理的方便吧,不用主動去負責ViewGroup的子物件的銷毀。

  在View中有一個成員:protected ViewParent mParent; 為每一個View都指定了其唯一Parent。

 

  至於這樣區別對待的優點:滿足模式中所提到的安全性,畢竟單個對象和組合對象還是有區別的,

組合對象的操作更加複雜,需要管理其子物件:顯示內容和焦時間點事件處理派發等,而單個對象顯然不需要具備這些,

若不加區分存在潛在使用上的安全隱患和單個對象不必要的複雜性;至於還有其他什麼原因上的考慮就不得知了,期待達人解答。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.