創(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)孽江。