Android系統設計中的設計模式分析之二

來源:互聯網
上載者:User

Factory:
標準設計模式中存在兩種原廠模式,可以參見下面這兩個地址,裡面有詳細的介紹。
Factory

http://blog.csdn.net/cjjky/article/details/7314118

Abstract Factory

http://blog.csdn.net/cjjky/article/details/7346893

其要點都在於Client只關心抽象工廠和抽象產品,而不關心具體的工廠和工廠建立出來的具體的產品是什麼。
另外,對Android中存在的Factory進行了整理,大概分了兩類:
一類是產品唯一且固定的,與標準的原廠模式定義不一樣,但也算是對原廠模式的活學活用。
SSLCertificateSocketFactory
Socket createSocket(String host, int port, InetAddress localAddr, int localPort)
Socket createSocket(InetAddress addr, int port)
BitmapFactory
Bitmap decodeByteArray(byte[] data, int offset, int length, BitmapFactory.Options opts)
Bitmap decodeByteArray(byte[] data, int offset, int length)
Bitmap decodeFile(String pathName)
另一類是算是標準的原廠模式。Android定義了抽象工廠ViewSwitcher.ViewFactory和ViewSwitcher.ViewFactory,還定義了抽象產品View
ViewSwitcher.ViewFactory
View makeView()
LayoutInflater.Factory
View onCreateView(String name, Context context, AttributeSet attrs)

Builder:
參見:http://blog.csdn.net/cjjky/article/details/7327200
標準設計模式中的Builder規定由抽象Builder把構建對象的各個步驟定義好抽象方法,具體實作類別Builder去實現這些抽象方法,從而構造出不同的對象。
而Android中的Builder模式稍稍變通了一下,沒有抽象Builder角色,直接為一個對象配備了固定的Builder,然後在Builder中把構造對象的步驟開放出來,由使用者分步調用。如:
AlertDialog.Builder
Notification.Builder
Uri.Builder

Stategy:
參見:http://blog.csdn.net/cjjky/article/details/7322688
每一個具體的Interpolator都代表一個具體的演算法。Interpolator類對它們進行了抽象,扮演了一個Strategy角色。而Animator算是使用Strategy的Context。

Proxy:
參見:http://blog.csdn.net/cjjky/article/details/7330657
代理模式的四種應用場合:
第一:遠程代理,也就是為一個對象在不同的地址空間提供局部代表,這樣可以隱藏一個對象存在於不同地址空間的事實。
第二:虛擬代理,是根據需要建立開銷很大的對象,通過它來存放執行個體化需要很長時間的真實對象。
第三:安全代理,用來控制真實對象訪問時的許可權。
第四:智能引用,是指當調用真實對象時,代理處理另外一些事。
Android中的AIDL屬於第一種應用。

Observer:
參見:http://blog.csdn.net/cjjky/article/details/7384951
模式的應用情境及特點
1、多個不同的對象都對同一個對象的狀態改變感興趣。
2、對象之間要求很鬆散的耦合時使用。
3、可以向Observerable中添加/刪除Observer
4、Observerable對Observer的數量不做限制,有狀態改變時通知所有的Observer。

Decorator:
參見:http://blog.csdn.net/cjjky/article/details/7478788
個人見解:
除模式本身定義的情境外,還比較適用於被封裝的類不能繼承、不瞭解細節的情況。比如從Resolver中擷取到系統的Cursor時,實際只取到了Cursor這個介面,如果想擴充Cursor的功能而又不改變介面,只有Decorator最合適。這種情況下是無法繼承的。

Facade:
參見:http://blog.csdn.net/cjjky/article/details/7570632
實現一個功能需要先調用A的a方法,再調用B的b方法,再調用C的c方法時,可以定義一個Facade類,在裡麵包含了對a,b,c的調用集合。這樣外部使用一個Facade就可以了。

State:
參見:http://blog.csdn.net/cjjky/article/details/7585207
當控制一個對象狀態轉換的條件運算式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。當一個對象的行為取決於它的狀態,並且它必須在運行時刻根據狀態改變它的行為時,就可以考慮使用狀態模式了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.