Android之什麼場景該使用單例模式總結
1、什麼是單例模式
單例模式意味著只有一個物件,至於單例模式如何實現就不這裡就不多說了,有很多種實現辦法。
2、什麼時候該使用單例模式?如果不使用單例模式會出現什麼問題?
先舉2個例子
例子1
當我們做得到最新的簡訊和最新的通話記錄的時候,我們一般採取一個類繼承ContentObserver,當資料庫裡面的內容變化時候,就會觸發裡面的onchange()函式,部分程式碼如下
public class Sms {
public Handler handler;
public HandlerThread handlerThread;
public statid final threadName = "smsThread";
public Sms(){
handlerThread = new HandlerThread (threadName );
handlerThread .start();
handler = new Handler(handlerThread.getLoop());
}
class sms extend contentObserver {
onchange(boolean self){
//邏輯程式碼
//上傳給服務端用handler
handler.post(new Runable(){
});
}
}
}
這裡沒有寫註冊的程式碼,問題是onchange會多回撥很多次,當我們在不同的地方多次構建Sms物件的時候,然後就有了很多不同的handler,然後再去傳送就會傳送重複資料,我們為了避免重複資料,這樣的情況下我們就需要採取單例模式得到handler,改成下面的情況
public class Sms {
public Handler handler;
public HandlerThread handlerThread;
public statid final threadName = "smsThread";
private Sms sms= new Sms();
private Sms(){
handlerThread = new HandlerThread (threadName);
handlerThread .start();
handler = new Handler(handlerThread.getLoop());
}
public static Sms getInstance() {
return sms;
}
class sms extend contentObserver {
onchange(boolean self){
//邏輯程式碼
//上傳給服務端用handler
handler.post(new Runable(){
});
}
}
}
例子2
當我們做通話錄音的功能,會通過自己寫的onstart(), 然後裡面實現我們的錄音功能,但是我們構建這個類的物件的時候有多次,但是我們每次只允許一個地方錄音,然後在我們類通過一個成員屬性變數,來控制,如下
public Record () {
public boolean isRunning = false;
public Record (){}
public onstart() {
isRunning = true;
//錄音邏輯
}
}
當我們多個地方呼叫的時候,每次都是構建Record,我們又初始化了isRunning,所以這個裡面的isRunning = true,無效
這個時候我們需要採用單例模式
public Record(){
public Record record = new Record();
public boolean isRunning = false;
private Record () {
}
public Record static getInstance() {
return record;
}
public onstart() {
isRunning = true;
//錄音邏輯
}
}
這樣就不會重複錄音了,其實還有一個辦法,就是把這個isRunning變成靜態變數,但是我們出發點還是希望一個物件好,所以我們還是用單例模式吧。
3、總結
當這個類的物件在多個地方建立的時候,使得內部的方法多次呼叫,但是我們希望只要一個物件操作這個方法,或者不希望多個地方同時呼叫這個方法,我們需要保持這個方法的單一性質,我們就用單利模式吧。
相關文章
- Android設計模式之——單例模式之原始碼使用場景(一)Android設計模式單例原始碼
- 單例模式常見場景單例模式
- 單例模式應用場景:單例模式
- react中如何區分什麼場景下應該使用useEffect,什麼場景下應該使用釋出訂閱模式,進行通訊?React模式
- 單例模式總結單例模式
- 什麼場景應該用MongoDB ?MongoDB
- Android設計模式——策略模式之原始碼使用場景(三)Android設計模式原始碼
- 結合 Android 看看單例模式怎麼寫Android單例模式
- 單例模式的常見應用場景單例模式
- Android 面試之單例模式Android面試單例模式
- Android設計模式之單例模式Android設計模式單例
- 為什麼要用單例模式?單例模式
- 設計模式總結 —— 單例設計模式設計模式單例
- android常用設計模式之單例模式Android設計模式單例
- Android Gradle 常用使用場景實現方式的總結AndroidGradle
- 漫畫:什麼是單例模式?單例模式
- Java中單例設計模式總結Java單例設計模式
- 設計模式學習筆記(四)單例模式的實現方式和使用場景設計模式筆記單例
- Android 場景問題總結。(部分轉載)Android
- 什麼業務場景適合使用Redis?Redis
- oracle asm 磁碟管理什麼場景該用什麼樣的冗餘方式OracleASM
- 垂直水平居中的方式總結 +(使用場景)
- flex:0 flex:1 flex:none flex:auto應該在什麼場景下使用?FlexNone
- 讓 APISpace 告訴你什麼場景使用什麼APIAPI
- 《前端實戰總結》之迭代器模式的N+1種應用場景前端模式
- SSL代理是什麼?有哪些使用場景?
- NFC是什麼功能?有哪些使用場景?
- 美團一面:會單例模式嗎,寫個單例看看?(8大單例模式實現方式總結)單例模式
- 面試官:Kafka是什麼,它有什麼特性與使用場景?面試Kafka
- 面試官:ElasticSearch是什麼,它有什麼特性與使用場景?面試Elasticsearch
- 面試官:RocketMQ是什麼,它有什麼特性與使用場景?面試MQ
- 面試官:Zookeeper是什麼,它有什麼特性與使用場景?面試
- 用到的設計模式總結--單例模式+工廠方法模式+Builder模式設計模式單例UI
- 觀察者模式應用場景例項模式
- Android LaunchMode使用場景Android
- DCL之單例模式單例模式
- PHP之單例模式PHP單例模式
- 設計模式之☞單例模式設計模式單例