1、回調(diào)是觀察者模式的簡單形式硫豆。
觀察者模式也就是將回調(diào)上升到設(shè)計模式的理論高度上了而已龙巨。
2、單例模式
ImageLoader熊响、LayoutInflater
3旨别、適配器模式
ListView的adapter
4、建造者模式
AlertDialog.Builder
Glide.with(this).load(url).into(iv_demo);
5汗茄、觀察者模式
BaseAdapter調(diào)用notifyDataSetChanged更新數(shù)據(jù)秸弛,內(nèi)部實現(xiàn)是觀察者模式
BroadcaseReceiver
6、享元模式
Message
避免創(chuàng)建大量對象
7洪碳、職責(zé)鏈模式
事件分發(fā)递览、有序廣播
請求者與處理者解耦,但是遍歷太多會影響性能
8偶宫、策略模式
屬性動畫中的時間插值器
返回值解析為例,傳入什么樣的解析器环鲤,就可以把二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成什么格式的數(shù)據(jù),比如String、Json麦撵、XML澡谭。
主要用來分離算法,在相同的行為抽象下有不同的具體實現(xiàn)策略西剥,展示了開閉原則
9痹栖、代理模式
ActivityManagerProxy代理了AMS,實質(zhì)為遠(yuǎn)程代理瞭空,前者內(nèi)部通過binder與AMS跨進(jìn)程通信
分為靜態(tài)揪阿、動態(tài)疗我,靜態(tài)代理是一種委托機制
而動態(tài)代理通過InvocationHandler,利用反射機制實現(xiàn)
10南捂、組合模式
view和viewGroupd的嵌套組合
11吴裤、簡單工廠
簡單工廠模式的工廠類一般是使用靜態(tài)方法,通過接收的參數(shù)的不同來返回不同的對象實例溺健。
不修改代碼的話麦牺,是無法擴展的。
工廠方法模式
BitmapFactory了鞭缭,通過各種decodeXXX()就可以從不同渠道獲得Bitmap對象剖膳,
12、抽象工廠模式
13岭辣、原型模式
ArrayList實現(xiàn)了cloneable接口
深拷貝吱晒、淺拷貝
14、模板方法模式
AysncTask易结、activity生命周期方法等等很多都是
模板方法模式的使用場景也是一句話:流程確定枕荞,具體實現(xiàn)細(xì)節(jié)由子類完成。
15搞动、裝飾模式
contextWrapper
裝飾模式意在擴展躏精,而代理意在控制訪問
16、迭代模式
List鹦肿、Map矗烛、Cursor
支持以不同的方式去遍歷一個容器對象
17、外觀模式
context箩溃,封裝了很多重要的操作瞭吃,只是一個定義了很多接口的抽象類
18、中介者模式
主板相對于CPU/顯卡涣旨、內(nèi)存就是中介
三個基本特征:封裝歪架,繼承,多態(tài)霹陡;
五個基本原則:
1和蚪、單一職責(zé)原則:一個類,最好只做一件事烹棉,只有一個引起它的變化攒霹。單一職責(zé)原則可以看做是低耦合、高內(nèi)聚在面向原則上的引申浆洗,以提高內(nèi)聚性來減少引起變化的原因催束。如下面計算器例子里面,加減乘除各一個類:
2伏社、開放封閉原則(OCP):軟件的功能應(yīng)該是可擴展的抠刺,而盡可能的不修改塔淤。因為修改程序有可能會對原來的程序造成錯誤。不能修改矫付,但是可以添加功能凯沪,盡可能的在外邊添加新的類,如上面計算器的項目一樣买优。對于要添加的功能就添加一個類妨马,然后只修改下面的switch就可以了。
3杀赢、Liskov替換原則(LSP):子類必須能夠替換基類烘跺。這一思想體現(xiàn)為對繼承機制的約束規(guī)范,只有子類能夠替換基類時脂崔,才能保證運行期內(nèi)識別子類滤淳,這是保證繼承復(fù)用的基礎(chǔ)。如上例JisuanQi jsp=new Add(n1,n2);即:子類可以代替換父類砌左,而父類不可以替換子類脖咐。
4、依賴倒置原則:依賴于抽象汇歹,具體來說就是屁擅,高層模塊不依賴底層模塊,二者都通依賴于抽象产弹。抽象不依賴于具體派歌,而具體依賴于抽象。模塊間的依賴是通過抽象發(fā)生痰哨,實現(xiàn)類之間不發(fā)生直接的依賴關(guān)系胶果,其依賴關(guān)系是通過接口或抽象類產(chǎn)生的;接口或抽象類不依賴于實現(xiàn)類斤斧;實現(xiàn)類依賴于接口和抽象類早抠。采用依賴倒置原則可以減少類間的耦合性,提高系統(tǒng)的穩(wěn)定性撬讽,減少并發(fā)引起的風(fēng)險蕊连,提高代碼的可讀性和可維護(hù)性。
5锐秦、接口隔離原則:使用多個小的專門的接口咪奖,而不要使用一個大的總接口盗忱。就是每一個接口都執(zhí)行一個專門的功能酱床,用什么調(diào)什么。這樣可以提高代碼的靈活性趟佃,還可以降低類間的耦合性扇谣。提高穩(wěn)定性昧捷。