當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類
1.乙個物件的行為取決於它的狀態,並且它的狀態必須在執行時根據狀態改變它的行為
2.**中包含大量與物件狀態有關的條件語句,例如,乙個操作中含有龐大的多分支語句 if -else且這些分支依賴該物件的狀態
實戰使用者登入系統
取在普通的應用中,乙個**按鈕,判斷使用者登入狀態,如果未登入會先讓使用者登入,然後在執行**操作
如果是已登入,可以直接執行**操作。可見,對於乙個按鈕的操作對於不同狀態處理完全不同,
mainactivity**
public class mainactivity extends activity
});//登出按鈕
findviewbyid(r.id.activity_main).setonclicklistener(new view.onclicklistener()
});}
}
loginactivity
public class loginactivity extends activity
});}
private void login()
}
logincontext
/******************************************
* 類名稱:logincontext
* 類描述:使用者介面和狀態管理類
* * @version: 2.3.1
* @author:
* @time: 2016/11/16 14:12
******************************************/
public class logincontext
public static logincontext getlogincontext()
public void setstate(userstate astate)
public void forward(context context)
public void comment(context context)
}
使用者狀態類 userstate
public inte***ce userstate
已登入狀態loginedstate
/******************************************
* 類名稱:loginedstate
* 類描述:已登入狀態
* @time: 2016/11/16 14:13
******************************************/
public class loginedstate implements userstate
@override
public void comment(context context)
}
登出狀態未登入狀態logoutstate
public class logoutstate implements userstate
@override
public void comment(context context)
private void gotologin(context context)
}
如果不使用狀態模式,在任何呼叫這些功能時都要進行是否登入的判斷,**邏輯就變成if-else,如果再增加使用者乙個狀態,還需要再支援對這個狀態的判斷,使得模組很脆弱,一單忘記某個使用者狀態進行判斷,很容易引發使用者許可權問題,
總結:狀態模式的關鍵在於不同狀態下對同一行為有不同的響應,其實就是乙個將if -else用多型來實現的乙個例子。
優點:state模式將所有與乙個特定的狀態相關的行為都放入乙個狀態物件中,它提供了乙個更好的方法來組織與特定狀態相關的**,將繁瑣的狀態判斷轉換成結構清晰的狀態類族,在避免**膨脹的同事也保證了可擴充套件性與可維護性
缺點:增加系統類和物件的個數
實戰筆記 設計模式
一 各種設計模式詳解 二 開發常用設計模式 最佳例項 1.工廠模式 通過工廠方法建立指定型別的物件,常與其他設計模式配合使用 最佳例項 spring bean factory 2.策略模式 封裝不同類的處理邏輯為策略,配置工廠模式在不同入參情況返回不同策略類 相對固定的分類處理 更加優雅易擴充套件 ...
Android 設計模式 筆記 責任鏈模式
介紹 我們把多個節點首尾相連所構成的模型稱之為鏈,對於鏈每個節點都可以拆開再連線,因此鏈式結構具有很好的靈活性。程式設計時候,我們這一結果應用於程式設計,把每乙個節點看做乙個物件,每乙個物件擁有不同的處理邏輯,當乙個請求從鏈式的首端發出。沿著鏈的路徑一次傳遞給每乙個節點物件,直至有物件處理這個請求位...
Android原始碼設計模式解析與實戰筆記
2.builder模式 適用於 物件初始化複雜 產品類複雜不同呼叫順序產生最終型別不同 方法不同呼叫順序產生最終結果不同。鏈式呼叫直觀。3.原型模式 使用者通過從乙個樣板物件中轉殖出乙個內部屬性一致的物件。跳過 4.工廠方法模式 定義乙個用於建立物件的介面。讓其子類決定例項化哪個物件。複雜的物件時候...