設(shè)計模式

創(chuàng)建型:
工廠模式(Factory Pattern)
抽象工廠模式(Abstract Factory Pattern)
單例模式(Singleton Pattern)
建造者模式(Builder Pattern)
原型模式(Prototype Pattern)

結(jié)構(gòu)型:
適配器模式(Adapter Pattern)
橋接模式(Bridge Pattern)
過濾器模式(Filter拼坎、Criteria Pattern)
組合模式(Composite Pattern)
裝飾器模式(Decorator Pattern)
外觀模式(Facade Pattern)
享元模式(Flyweight Pattern)
代理模式(Proxy Pattern)

行為型:
責(zé)任鏈模式(Chain of Responsibility Pattern)
命令模式(Command Pattern)
解釋器模式(Interpreter Pattern)
迭代器模式(Iterator Pattern)
中介者模式(Mediator Pattern)
備忘錄模式(Memento Pattern)
觀察者模式(Observer Pattern)
狀態(tài)模式(State Pattern)
空對象模式(Null Object Pattern)
策略模式(Strategy Pattern)
模板模式(Template Pattern)
訪問者模式(Visitor Pattern)

工廠模式痘儡,創(chuàng)建復(fù)雜對象。
如Bitmap decodeResource Bitmap decodeFile

單例模式卒密,類只有一個實例
如context.getSystemService

建造者模式,適用于初始化的對象比較復(fù)雜且參數(shù)較多的情況岳掐。
如AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle("Title")
.setMessage("Message");

原型模式 凭疮,拷貝對象 clone() 。
如intent bundle串述,避免引用避免改動了原對象执解。

適配器模式adapter

觀察者模式 ,改變狀態(tài)則所有依賴于它的對象都會得到通知并被自動更新纲酗。
如Recyclerview的notifyDataSetChanged

代理模式衰腌,適用于當(dāng)無法或不想直接訪問某個對象時通過一個代理對象來間接訪問,為了保證客戶端使用的透明性觅赊。
如:ContextWrapper
動態(tài)代理Proxy右蕊、spring、Retrofit

責(zé)任鏈模式吮螺,保證了事件的有序性和靈活饶囚。
如:view事件分發(fā)傳遞機制

策略模式,同一問題的多種處理方式鸠补。
如:animation.setInterpolator(new LinearInterpolator());
animation.setInterpolator(new AccelerateInterpolator());

備忘錄模式萝风,在對象之外保存保存對象的當(dāng)前狀態(tài),并且在之后可以恢復(fù)到此狀態(tài)紫岩。
如:onSaveInstanceState

橋接模式:
以咖啡大小杯和口味為例,不管是Coffee變化(大小杯)规惰,還是風(fēng)味變化(CoffeeAdditives),其相對于對方而言都是獨立的泉蝌,兩者唯一的聯(lián)系就是Coffee中保持對coffeeAdditives的引用歇万,為二者間的紐帶,這就是橋接模式勋陪。
如:Listview和BaseAdapter

過濾器模式 filter

組合模式(Composite Pattern)表示對象的部分-整體層次結(jié)構(gòu)
如:在Android的視圖樹中贪磺,容器一定是ViewGroup,只有ViewGroup才能包含其他View和ViewGroup粥鞋。View是沒有容器的缘挽。

裝飾器模式 可以在不動用上層的情況下,直接下下級進行擴展,通過不同的包裝類實現(xiàn)不同的功能瞄崇。動態(tài)地給對象加入額外的職責(zé)
如:ContextWrapper和context
Context是一個全局應(yīng)用環(huán)境接口呻粹,詳細的實現(xiàn)由Android系統(tǒng)完畢。它能訪問應(yīng)用資源苏研,而且能夠啟動Activity等浊,Service。接收broadcast摹蘑。
它是一個抽象類筹燕,里面包括了各種方法的聲明,應(yīng)該將它作為一個接口類來看待。
ContextThemeWrapper這個是包括主題的裝飾器撒踪,而Activity是它的子類过咬。Application, Service, ReceiverRestrictedContext都是ContextWrapper的子類。

外觀模式 要求一個子系統(tǒng)的外部與其內(nèi)部的通信必須通過一個統(tǒng)一的對象進行制妄,就是封裝
如:startActivity

享元模式 對象池的一種實現(xiàn)掸绞,主要目的是用來盡可能減少內(nèi)存使用量。適合于存在大量重復(fù)對象的場景耕捞,來緩存可共享的對象衔掸,達到對象共享,避免創(chuàng)建過多對象的效果俺抽,這樣可以提升性能敞映。
如:String對象在第一次被定義后是緩存在常量池中的,當(dāng)其他地方要用到的時候直接使用的是緩存磷斧,而不會重復(fù)創(chuàng)建振愿。
Message,通過單鏈表這種方式一樣實現(xiàn)了對象池的思想

命令模式 封裝弛饭、隊列埃疫、響應(yīng)、事務(wù)
如:Thread的內(nèi)部會調(diào)用Runnable的run()孩哑,Thread又充當(dāng)了具體的命令角色栓霜,最后的Runnable則是接受者了,負責(zé)最后的功能處理横蜒。
Handler里面的 接受者:Handler胳蛮,執(zhí)行消息的處理操作。調(diào)用者:Looper丛晌,調(diào)用消息的的處理方法仅炊。命令角色:Message,消息類澎蛛。

解釋器模式 給定一個語言抚垄,定義它的文法的一種表示,并定義一個解釋器谋逻,這個解釋器使用該表示來解釋語言中的句子呆馁。
如:AndroidManifest.xml是由PackageManagerService使用了PackageParser這個類來解釋的,這里面就用到了解釋器模式毁兆。對于AndroidManifest.xml中的每一個標(biāo)簽浙滤,都有對應(yīng)的類去保存相應(yīng)的信息。

迭代器模式气堕。又叫做游標(biāo)(Cursor)模式沼死,提供一種方法順序訪問一個容器對象中的各個元素,而又不需要暴露該對象的內(nèi)部表示凌彬。
如:Iterator材部。Java中的Map、List等等容器,都使用到了迭代器模式。
sql的Cursor游標(biāo),cursor.moveToFirst()蔽介,cursor.moveToNext()

中介者模式。一個中介者對象來封裝一系列的對象交互煮寡。中介者使得各對象不需要顯式地相互引用虹蓄。
如:Android中的鎖屏功能就用到了中介者模式,KeyguardService(鎖屏服務(wù))通過KeyguardViewMediator(鎖屏中介者)來協(xié)調(diào)各種Manager的狀態(tài)以達到鎖屏的功能幸撕。

狀態(tài)模式,一個對象的內(nèi)在狀態(tài)改變時允許改變其行為薇组。
如登錄狀態(tài)下和未登錄狀態(tài)、WIFI,藍牙坐儿,網(wǎng)絡(luò)連接等狀態(tài)管理

空對象模式 Null對象模式的目的是最小化這種空檢查律胀。因此,我們經(jīng)常將null對象實現(xiàn)為單例貌矿。使用空對象模式可以接受null炭菌,并返回相應(yīng)的信息。

模板模式 定義一套流程下來的固定步驟逛漫。定義抽象類黑低,使用實現(xiàn)。
如:View的draw方法中定義了一整套的繪制流程酌毡,這個流程是固定的克握,所有的Android中的View都是按照這個流程來繪制的。
Activity的生命周期枷踏,service菩暗、AsyncTask等等也是用到了模板方法模式

訪問者模式 封裝某些作用于某種數(shù)據(jù)結(jié)構(gòu)中各元素的操作,它可以在不改變數(shù)據(jù)結(jié)構(gòu)的前提下定義作用于這些元素的新的操作旭蠕。增加新的操作很容易,就是增加一個新的訪問者停团。
如:Android中編譯期注解(依賴APT(Annotation Processing Tools)實現(xiàn)), 其內(nèi)部就有使用訪問者模式,元素結(jié)構(gòu)是基本不變的Element及其子類(包元素PackageElement掏熬,類型元素TypeElement等)是被訪問者佑稠,其中的accept方法接收一個ElementVisitor類型的訪問者,ElementVisitor中有多個visit方法處理不同類型的元素, 比較著名的ButterKnife,Dagger,Retrofit等開源庫都有使用編譯期注解實現(xiàn)孽江。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末讶坯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子岗屏,更是在濱河造成了極大的恐慌辆琅,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件这刷,死亡現(xiàn)場離奇詭異婉烟,居然都是意外死亡,警方通過查閱死者的電腦和手機暇屋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門似袁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咐刨,你說我怎么就攤上這事昙衅。” “怎么了定鸟?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵而涉,是天一觀的道長。 經(jīng)常有香客問我联予,道長啼县,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任沸久,我火速辦了婚禮季眷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘卷胯。我一直安慰自己子刮,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布窑睁。 她就那樣靜靜地躺著话告,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卵慰。 梳的紋絲不亂的頭發(fā)上沙郭,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音裳朋,去河邊找鬼病线。 笑死,一個胖子當(dāng)著我的面吹牛鲤嫡,可吹牛的內(nèi)容都是我干的送挑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼暖眼,長吁一口氣:“原來是場噩夢啊……” “哼惕耕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起诫肠,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤司澎,失蹤者是張志新(化名)和其女友劉穎欺缘,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挤安,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡谚殊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蛤铜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫩絮。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖围肥,靈堂內(nèi)的尸體忽然破棺而出剿干,到底是詐尸還是另有隱情,我是刑警寧澤穆刻,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布置尔,位于F島的核電站,受9級特大地震影響蛹批,放射性物質(zhì)發(fā)生泄漏撰洗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一腐芍、第九天 我趴在偏房一處隱蔽的房頂上張望差导。 院中可真熱鬧,春花似錦猪勇、人聲如沸设褐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽助析。三九已至,卻和暖如春椅您,著一層夾襖步出監(jiān)牢的瞬間外冀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工掀泳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留雪隧,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓员舵,卻偏偏與公主長得像脑沿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子马僻,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容