對(duì)于開發(fā)者來(lái)說,設(shè)計(jì)模式想必都不陌生,而在Android開發(fā)中,設(shè)計(jì)模式起到的作用是不容小視的,最基本的設(shè)計(jì)模式就有八種,從基本角度來(lái)說,適配器往往是我們更加經(jīng)常用到的,那么,我們要怎樣才能全面理解這幾種設(shè)計(jì)模式呢?
頭條推薦
一般來(lái)說,常用的設(shè)計(jì)模式有以下八種:?jiǎn)卫⒐S、觀察者、代理、命令、適配器、合成、訪問者……>>詳細(xì)
Android中對(duì)組合模式的應(yīng)用,可謂是泛濫成粥,隨處可見,那就是View和ViewGroup類的使用。在android UI設(shè)計(jì),幾乎所有的widget和布局類都依靠這兩個(gè)類。
組合模式,Composite Pattern,是一個(gè)非常巧妙的模式。幾乎所有的面向?qū)ο笙到y(tǒng)都應(yīng)用到了組合模式。
1.意圖
將對(duì)象View和ViewGroup組合成樹形結(jié)構(gòu)以表示"部分-整體"的層次結(jié)構(gòu)(View可以做為ViewGroup的一部分)。
組合模式使得用戶對(duì)單個(gè)對(duì)象View和組合對(duì)象ViewGroup的使用具有一致性。
熱點(diǎn)詞匯: 部分-整體 容器-內(nèi)容 樹形結(jié)構(gòu) 一致性 葉子 合成 安全性 透明性
2.結(jié)構(gòu)
閱讀全文
1、策略模式概念
定義一系列算法,把他們獨(dú)立封裝起來(lái),并且這些算法之間可以相互替換。策略模式主要是管理一堆有共性的算法,客戶端可以根據(jù)需要,很快切換這些算法,并且保持可擴(kuò)展性。
策略模式的本質(zhì):分離算法,選擇實(shí)現(xiàn)。
2、策略模式實(shí)現(xiàn)
閱讀全文
單例模式,可以說是GOF的23種設(shè)計(jì)模式中最簡(jiǎn)單的一個(gè)。
這個(gè)模式相對(duì)于其他幾個(gè)模式比較獨(dú)立,它只負(fù)責(zé)控制自己的實(shí)例化數(shù)量單一(而不是考慮為用戶產(chǎn)生什么樣的實(shí)例),很有意思,是一個(gè)感覺上很干凈的模式,本人很喜歡這個(gè)模式。
android中很多地方都用到了單例模式,本文以輸入法管理者InputMethodManager為例,展開分析。
單例模式,Singleton Pattern,能夠以其特有的優(yōu)勢(shì),替代系統(tǒng)中全局變量,應(yīng)用非常廣泛。
閱讀全文
工廠方法模式,往往是設(shè)計(jì)模式初學(xué)者入門的模式,的確,有人稱之為最為典型最具啟發(fā)效果的模式。
android中用到了太多的工廠類,其中有用工廠方法模式的,當(dāng)然也有很多工廠并不是使用工廠方法模式的,只是工具管理類。
今天以ThreadFactory舉例說明一下簡(jiǎn)單工廠模式和工廠方法模式。
工廠方法模式,F(xiàn)actory Method,簡(jiǎn)單的方式,不簡(jiǎn)單的應(yīng)用。
1.意圖
定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪個(gè)類。工廠方式模式使一個(gè)類的實(shí)例化延遲到其子類。
熱門詞匯:虛構(gòu)造器 延遲 創(chuàng)建對(duì)象 子類
2.結(jié)構(gòu)圖和代碼
我們先看看標(biāo)準(zhǔn)的工廠方法結(jié)構(gòu)圖:
先抽象的產(chǎn)品類,抽象的工廠類,然后用客戶端具體的工廠生產(chǎn)相應(yīng)的具體的產(chǎn)品,但是客戶端并不知道具體的產(chǎn)品是怎么生產(chǎn)的,生產(chǎn)的過程封裝在工廠里。所以說,某種程度上,工廠方法模式改變了我們直接用new創(chuàng)建對(duì)象的方式,一個(gè)很好的開始,意義重大。
以ThreadFactory為例:
閱讀全文
對(duì)于android開發(fā)者來(lái)說起,適配器模式簡(jiǎn)直太熟悉不過,有很多應(yīng)用可以說是天天在直接或者間接的用到適配器模式,比如ListView。
ListView用于顯示列表數(shù)據(jù),但是作為列表數(shù)據(jù)集合有很多形式,有Array,有Cursor,我們需要對(duì)應(yīng)的適配器作為橋梁,處理相應(yīng)的數(shù)據(jù)(并能形成ListView所需要的視圖)。
正是因?yàn)槎x了這些適配器接口和適配器類,才能使我們的數(shù)據(jù)簡(jiǎn)單靈活而又正確的顯示到了adapterview的實(shí)現(xiàn)類上。
適配器模式,Adapter Pattern,勇敢的去適配,大量的資源可以重用。
1.意圖
適配器模式,把一個(gè)類的接口變換成客戶端所期待的另一種接口,從而使原本不匹配而無(wú)法在一起工作的兩個(gè),類能夠在一起工作。
適配器模式分為類適配器模式和對(duì)象適配器模式。
關(guān)于類適配器模式,因?yàn)閖ava的單繼承,如果繼承一個(gè)類,另外的則只能是接口,需要手動(dòng)實(shí)現(xiàn)相應(yīng)的方法。
熱門詞匯:類的適配器模式 對(duì)象的適配器模式 缺省適配器模式 源類 目標(biāo)接口
2.結(jié)構(gòu)圖和代碼
閱讀全文
CV一族,應(yīng)該很容易理解原型模式的原理,復(fù)制,粘貼完后看具體情況是否修改,其實(shí)這就是原型模式。
從java的角度看,一般使用原型模式有個(gè)明顯的特點(diǎn),就是實(shí)現(xiàn)cloneable的clone()方法。
原型模式,能快速克隆出一個(gè)與已經(jīng)存在對(duì)象類似的另外一個(gè)我們想要的新對(duì)象。
1.意圖
用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過拷貝這些原型創(chuàng)建新的對(duì)象。
熱門詞匯:克隆 深拷貝 淺拷貝
2.結(jié)構(gòu)圖和代碼
它的結(jié)構(gòu)圖非常簡(jiǎn)單,我們以Intent為例子:
Intent的clone方法非常簡(jiǎn)單:
閱讀全文
觀察者模式,是一種非常常見的設(shè)計(jì)模式,在很多系統(tǒng)中隨處可見,尤其是涉及到數(shù)據(jù)狀態(tài)發(fā)生變化需要通知的情況下。
本文以AbstractCursor為例子,展開分析。
觀察者模式,Observer Pattern,是一個(gè)很實(shí)用的模式,本人曾經(jīng)接觸到的各種平臺(tái)以及曾經(jīng)參與項(xiàng)目中打印模板解釋器中都用到了此模式。
1.意圖
定義對(duì)象間的一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都得到通知并被自動(dòng)更新。
熱門詞匯:依賴 發(fā)布-訂閱 事件 通知 更新 監(jiān)聽
2.結(jié)構(gòu)
這是一個(gè)最簡(jiǎn)單的觀察者模式,目標(biāo)對(duì)象能夠添加和刪除觀察者,當(dāng)自己某種狀態(tài)或者行為發(fā)生改變時(shí),可通過notify通知注冊(cè)的觀察者進(jìn)行更新操作。
分析AbstractCursor的具體情況,我們發(fā)現(xiàn)實(shí)際工作有時(shí)需要對(duì)觀察者進(jìn)行統(tǒng)一管理,甚至觀察者類型有很多種而又可以分成幾個(gè)系列,這個(gè)時(shí)候是要復(fù)雜的多,通過合理的分層這個(gè)問題很好解決。下面根據(jù)具體情況,我們畫出android中abstractCurosr中用到的觀察者模式結(jié)構(gòu)圖:
閱讀全文
模板方法,和單例模式是我認(rèn)為GOF的23中最簡(jiǎn)單的兩種模式。
但是我個(gè)人對(duì)模板方法的經(jīng)典思想特別推崇,雖然模板方法在大對(duì)數(shù)情況下并不被推薦使用,但是這種通過父類調(diào)用子類的方法,使用繼承來(lái)改變算法的一部分,是面向?qū)ο蟮囊环N基本認(rèn)識(shí)。
打比方說父親有很多理想,就行醫(yī)救人吧,但是父親醫(yī)術(shù)不行,只能靠?jī)鹤?,兒子長(zhǎng)大后遵從父親大志,春風(fēng)拂面,妙手回春,實(shí)現(xiàn)了父親的理想,兒子做的事情早在出生前就定下來(lái)了,是父親之前久定好的模板。
認(rèn)識(shí)到模板方法的這種思想,父類可以讓未知的子類去做它本身可能完成的不好或者根本完成不了的事情,對(duì)框架學(xué)習(xí)大有幫助。
本文以View中的draw方法為例,展開分析。
模板方法,TemplateMethod,光是學(xué)習(xí)這個(gè)模式,就會(huì)對(duì)你產(chǎn)生長(zhǎng)遠(yuǎn)影響的一個(gè)模式。
1.意圖
定義一個(gè)操作中的算法的骨架,而將一些步驟延遲到子類中,模板方法使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。
熱門詞匯:骨架 步驟 結(jié)構(gòu) 延遲到子類
2.結(jié)構(gòu)
閱讀全文
|