程式設計師,你只能有一個媳婦兒!
【威哥說】今天是10月10日了,上班第3天,大家應該已經調整好狀態了吧!既然選擇了前方便風雨兼程,不要有一絲的鬆懈。將來的你一定會感謝現在努力拼命的自己。【也許你的朋友正在等你轉發到朋友圈】
【正文】
設計模式是前人在開發過程中總結的一些經驗,我們在開發過程中根據實際的情況,套用合適的設計模式,可以使程式結構更加簡單,利於程式的擴充套件和維護,但也不是沒有使用設計模式的程式就不好,如簡單的程式就不用了,有種畫蛇添足的感覺。
單例模式可以說是所有模式中最簡單的一種,它自始至終只能建立一個例項,可以有兩種形式,分別為懶漢式和餓漢式。
餓漢式,很簡單,一開始就建立了例項,實際上到底會不會被呼叫也不管
/**
* 餓漢式,執行緒安全
*
* @author 才子
*
*/
public class SingletonHungry {
private static SingletonHungry instance = new SingletonHungry();
private SingletonHungry() {
}
public static SingletonHungry getInstance() {
return instance;
}
}
懶漢式,由於是執行緒不安全的,在多執行緒中處理會有問題,所以需要加同步
/**
* 懶漢式,這是執行緒不安全的,如果有多個執行緒在執行,有可能會建立多個例項
*
* @author 才子
*
*/
public class SingletonIdler {
private static SingletonIdler instance = null;
private SingletonIdler() {
}
public static SingletonIdler getInstance() {
if (instance == null) {
instance = new SingletonIdler();
}
return instance;
}
}
加了同步之後的程式碼,每次進來都要判斷下同步鎖,比較費時,還可以進行改進
/**
* 懶漢式
*
* @author 才子
*
*/
public class SingletonIdler {
private static SingletonIdler instance = null;
private SingletonIdler() {
}
public synchronized static SingletonIdler getInstance() {
if (instance == null) {
instance = new SingletonIdler();
}
return instance;
}
}
加同步程式碼塊,只會判斷一次同步,如果已經建立了例項就不會判斷,減少了時間
/**
* 懶漢式
*
* @author 才子
*
*/
public class SingletonIdler {
private static SingletonIdler instance = null;
private SingletonIdler() {
}
public static SingletonIdler getInstance() {
if (instance == null) {
synchronized (SingletonIdler.class) {
if (instance == null)
instance = new SingletonIdler();
}
}
return instance;
}
}
單例模式在Androidd原生應用中也有使用,如Phone中NotificationMgr.java類
private static NotificationMgr sInstance;
private NotificationMgr(PhoneApp app) {
mApp = app;
mContext = app;
mNotificationManager = (NotificationManager) app
.getSystemService(Context.NOTIFICATION_SERVICE);
mStatusBarManager = (StatusBarManager) app
.getSystemService(Context.STATUS_BAR_SERVICE);
mPowerManager = (PowerManager) app
.getSystemService(Context.POWER_SERVICE);
mPhone = app.phone; // TODO: better style to use mCM.getDefaultPhone()
// everywhere instead
mCM = app.mCM;
statusBarHelper = new StatusBarHelper();
}
static NotificationMgr init(PhoneApp app) {
synchronized (NotificationMgr.class) {
if (sInstance == null) {
sInstance = new NotificationMgr(app);
// Update the notifications that need to be touched at startup.
sInstance.updateNotificationsAtStartup();
} else {
Log.wtf(LOG_TAG, "init() called multiple times! sInstance = "
+ sInstance);
}
return sInstance;
}
}
相關文章
- 程式猿媳婦兒注意事項
- 只缺一個程式設計師程式設計師
- 我是怎樣教媳婦物件導向程式設計的物件程式設計
- 程式設計師:你是一個產品程式設計師
- 面試了一個2年程式設計師,竟然只會curd!面試程式設計師
- 程式設計師該懂一點兒KPI程式設計師KPI
- 你憑什麼做好一個程式設計師?程式設計師
- 程式設計師的那些事兒 -- 高階程式設計師買衣服程式設計師
- 如果你喜歡上了一個程式設計師小夥程式設計師
- 你是一個工資太低的程式設計師嗎?程式設計師
- 程式設計師只吃青春飯?大齡程式設計師都去哪了?程式設計師
- 老程式設計師都去哪兒了?程式設計師
- 趣科技:程式設計師那些事兒程式設計師
- 程式設計師兼職那些事兒程式設計師
- 婦女節談女程式設計師的職業規劃程式設計師
- 你們的辦公室可真漂亮,可程式設計師坐哪兒?程式設計師
- 你們的辦公室可真漂亮 可程式設計師坐哪兒?程式設計師
- 【前端詞典】和媳婦講代理後的意外收穫前端
- 程式設計師因工資低拒絕offer,HR:估計你一輩子就是個程式設計師程式設計師
- 面試了一個2年程式設計師,竟然只會CRDU。網友神回覆!面試程式設計師
- 程式設計師的職業生涯能有多久?不做程式設計師了還能做些什麼?程式設計師
- 如何尊重一個程式設計師程式設計師
- 一個程式設計師的自白程式設計師
- 一個程式設計師的困惑?程式設計師
- 6年開發老程式設計師給你分析前端那些事兒程式設計師前端
- 辭職的程式設計師那些事兒程式設計師
- 程式設計師應該關注的一些事兒程式設計師
- 如果你不是程式設計師,你怎麼僱傭程式設計師呢程式設計師
- 10個理由讓你愛上程式設計師程式設計師
- 不會填坑的程式設計師不是一個好程式設計師!程式設計師
- 一個故事告訴你什麼才是好的程式設計師程式設計師
- 你可能是個假程式設計師,不信測一下程式設計師
- 作為一個Java 程式設計師 你應該會什麼Java程式設計師
- 你在成長為一個優秀的程式設計師嗎程式設計師
- 如果你恨一個程式設計師,忽悠他去做iOS開發程式設計師iOS
- 你是一個合格的J2EE程式設計師麼程式設計師
- 程式設計師的差距在哪裡?程式設計師的三個級別,你在哪裡?程式設計師
- 哪個Scratch少兒程式設計好用?程式設計