原创 解釋器模式--自定義語言翻譯機(行爲模式03)

什麼是行爲模式 給定一個語言,定義它的文法的一種表示,並定義一個解釋器,該解釋器使用該表示來解釋語言中的句子。 文法和解釋器是編譯原理課程中的術語,這裏我們說的通俗一點,以例子來說明。語法好比我們編寫Java中的class{}

原创 觀察者模式--衆多通知,一步到位(行爲模式06)

什麼是觀察者模式 定義對象間一種一對多的依賴關係,使得每當一個對象改變時,所有依賴於他的對象都會得到通知並被自動更新。 觀察者模式在實際應用中非常的廣泛,他的重要作用就是把觀察者和被觀察者解耦,使得彼此依賴更小。好比我們and

原创 狀態模式--隨遇而安(行爲模式08)

什麼是狀態模式 當一個對象的內在狀態改變時允許改變其行爲,這個對象看起來像是改變了他的類。 狀態模式中的行爲是由狀態來決定的,不同狀態下有不同的行爲,狀態模式和策略模式的結構幾乎完全一樣,但他們的目的、本質卻完全不同。狀態模式

原创 模板方法模式--封裝相似,簡而用之(行爲模式10)

什麼是模板方法模式 定義一個操作中的算法框架,將一些步驟引用到子類中,從而實現不改變算法結構重定向該算法的特定內容 模板方法主要針對問題解決的流程相同但是具體解決方法不同,比如我從學校乘車到火車站,流程肯定是出校門、選擇交通工

原创 策略模式--條條大路通羅馬(行爲模式07)

什麼是策略模式 策略模式定義了一系列封裝好的算法,使他們可以相互替換。 策略模式讓算法獨立於使用他的客戶端獨立變化。 策略模式的適用場景 同一種問題有多重處理方式,僅僅在具體實現有差別 需要安全的封裝同一類型的操作 實現

原创 訪問者模式--要風得風,要雨得雨(行爲模式11)

什麼是訪問者模式 封裝一些作用於某種數據結構中各元素的操作,它可以在不改變這個數據結構的前提下定義作用於這些元素的新操作。 這是最後一個模式了,不知不覺也快要結束了。訪問者模式也是這23種模式中最爲晦澀的一個了,還好使用頻率並

原创 中介者模式--萬能和事佬(行爲模式04)

什麼是中介者模式 中介者模式包裝了一系列對象相互作用的方式,使得這些對象不必明顯作用,從而使他們可以鬆散耦合。當某些對象之間的作用發生改變時,不會立即影響其他對象之間的作用。保證這些作用可以獨立變化。 中介者模式適用場景 對象

原创 原型模式--深淺拷貝要明知(創建型模式06)

什麼是原型模式 用原型實例指定創建對象的種類,並通過拷貝這些原型創建新對象。 原型模式有一個樣板實例,然後通過拷貝對象的形式來生成新對象,這個在jdk中有個克隆對象,從而避免new對象。 原型模式的適用場景 類初始化需要很多

原创 責任鏈模式--一級一級覓佳音,總有一款適合你(行爲模式01)

什麼是責任鏈模式 使多個對象都有機會處理請求。 這個行爲模式的關鍵就是在鏈的使用,寓意就是對象的鏈式調用,我解決不了的問題交給下一個對象處理,一級一級的調用,直到找到能解決的對象爲止。 責任鏈模式的適用場景 多對象處理同一請

原创 冒泡排序--雙層嵌套,兩兩比較

冒泡排序的思想 1. 比較相鄰元素,按需求歸位。 2. 冒泡排序雙層嵌套,外層負責比較次數,內層負責比較歸位數據。 3. 最大或最小數據的歸位後,爲優化性能不應該再次進行比較。 冒泡排序實現 public class

原创 ContentProvider使用詳解

ContentProvider簡介 每一個Android應用程序就是一個進程,都是一個單獨的虛擬機,他們之間也可能會有通信的需求,比如短信程序的聯繫人選擇需要用到通訊錄的聯繫人功能,ContentProvider和Content

原创 Android getResource().getColor(int)過時解決方法

使用getResources().getColor(R.color.colorAccent)被畫上橫線,提示這個方法過時了替換成如下即可: ContextCompat.getColor(Context,R.color.color

原创 迭代器模式--更高、更快、更強(行爲模式09)

什麼是迭代器模式 提供一種方法順序訪問一個容器對象中的各個元素,而又不需要暴露該對象的內部表示。 迭代器模式又稱爲遊標模式,迭代器模式是一個元老級別的設計模式,針對容器的訪問,我們java中要設計遍歷算法,迭代器算是客戶端與系

原创 Fragment與Activity的交互方式

Fragment依賴父Activity生存,所以分Activity與Fragment交互,Fragment與Activity交互,Fragment與Fragment交互,但是都需要中間者Activity。 Activity與Fra

原创 getAllNetworkInfo()過時解決方式

筆記:connectivityManager.getAllNetworkInfo()提示過時解決方法 public boolean isConnectingToInternet() { ConnectivityMa