Android 設計模式實戰筆記 狀態模式

2021-07-24 15:52:51 字數 2129 閱讀 3007

當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類

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.工廠方法模式 定義乙個用於建立物件的介面。讓其子類決定例項化哪個物件。複雜的物件時候...