设计模式是前人在开发过程中总结的一些经验,我们在开发过程中依据实际的情况,套用合适的设计模式,能够使程序结构更加简单。利于程序的扩展和维护。但也不是没有使用设计模式的程序就不好。如简单的程序就不用了,有种画蛇添足的感觉。

单例模式能够说是全部模式中最简单的一种,它自始至终仅仅能创建一个实例,能够有两种形式,分别为懒汉式和饿汉式

一、饿汉式。非常easy,一開始就创建了实例,实际上究竟会不会被调用也无论

package com.dzt.singleton;

/**
* 饿汉式。线程安全
*
* @author Administrator
*
*/
public class SingletonHungry { private static SingletonHungry instance = new SingletonHungry(); private SingletonHungry() { } public static SingletonHungry getInstance() {
return instance;
}
}

二、懒汉式,因为是线程不安全的,在多线程中处理会有问题。所以须要加同步

package com.dzt.singleton;

/**
* 懒汉式,这是线程不安全的,假设有多个线程在运行,有可能会创建多个实例
*
* @author Administrator
*
*/
public class SingletonIdler { private static SingletonIdler instance = null; private SingletonIdler() { } public static SingletonIdler getInstance() {
if (instance == null) {
instance = new SingletonIdler();
}
return instance;
}
}

加了同步之后的代码,每次进来都要推断下同步锁。比較费时。还能够进行改进

package com.dzt.singleton;

/**
* 懒汉式
*
* @author Administrator
*
*/
public class SingletonIdler { private static SingletonIdler instance = null; private SingletonIdler() { } public synchronized static SingletonIdler getInstance() {
if (instance == null) {
instance = new SingletonIdler();
}
return instance;
}
}

加同步代码块,仅仅会推断一次同步,假设已经创建了实例就不会推断,降低了时间

package com.dzt.singleton;

/**
* 懒汉式
*
* @author Administrator
*
*/
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;
}
}

Android 设计模式之单例模式的更多相关文章

  1. Android 设计模式 之 单例模式

    http://blog.csdn.net/fangchongbory/article/details/7734199   目录(?)[+] 单例模式常见情景 首先实现1中的单例模式A 实现2中单例模式 ...

  2. Android设计模式系列-单例模式

    单例模式,可以说是GOF的23种设计模式中最简单的一个. 这个模式相对于其他几个模式比较独立,它只负责控制自己的实例化数量单一(而不是考虑为用户产生什么样的实例),很有意思,是一个感觉上很干净的模式, ...

  3. Android设计模式之单例模式的七种写法

    一 单例模式介绍及它的使用场景 单例模式是应用最广的模式,也是我最先知道的一种设计模式.在深入了解单例模式之前.每当遇到如:getInstance()这样的创建实例的代码时,我都会把它当做一种单例模式 ...

  4. Android设计模式之单例模式

    定义 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例 . 单例模式是设计模式中最简单的形式之一.这一模式的目的是使得类的一 ...

  5. Android设计模式(1)----单例模式

    在非常多设计模式中.我相信大多数程序员最早接触的设计模式就是单例模式啦,当然了我也不例外. 单例模式应用起来应该是全部设计模式中最简单的.单例模式尽管简单,可是假设你去深深探究单例模式,会涉及到非常多 ...

  6. Android设计模式系列

    http://www.cnblogs.com/qianxudetianxia/category/312863.html Android设计模式系列(12)--SDK源码之生成器模式(建造者模式) 摘要 ...

  7. 经常使用的android设计模式

    一般来说,经常使用的android设计模式有下面8种:单例.工厂.观察者.代理.命令.适配器.合成.訪问者.   单例模式:目的是为了让系统中仅仅有一个调用对象,缺点是单例使其它程序过分依赖它,并且不 ...

  8. 设计模式之单例模式(Singleton)

    设计模式之单例模式(Singleton) 设计模式是前辈的一些经验总结之后的精髓,学习设计模式可以针对不同的问题给出更加优雅的解答 单例模式可分为俩种:懒汉模式和饿汉模式.俩种模式分别有不同的优势和缺 ...

  9. GJM : C#设计模式(1)——单例模式

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

随机推荐

  1. [Err] 1022 - Can't write; duplicate key in table '#sql-1500_26'

        今天用powerdesigner修改了一些外键关系,有两个外键的名字取一样的,忘记改了.然后在用navicat运行sql文件时,报出[Err] 1022 - Can't write; dupl ...

  2. iOS学习笔记28-系统服务(一)短信和邮件

    一.系统应用 在开发某些应用时,我们可能希望能够调用iOS系统内置的电话.短信.邮件.浏览器应用,或者直接调用安装的第三方应用,这个要怎么实现呢? 这里统一使用UIApplication的一个对象方法 ...

  3. [LOJ#522]「LibreOJ β Round #3」绯色 IOI(危机)

    [LOJ#522]「LibreOJ β Round #3」绯色 IOI(危机) 试题描述 IOI 的比赛开始了.Jsp 和 Rlc 坐在一个角落,这时他们听到了一个异样的声音 …… 接着他们发现自己收 ...

  4. IBM DB2 控制中心等图形工具在 Windows 下的字体设置

    原文地址(直接看原文): http://loveseaside.iteye.com/blog/648941 [简介如下] IBM DB2 在版本 8.0 以上就提供了一个跨平台的基于 Java 的一套 ...

  5. [bzoj2302][HNOI2011]problem c 递推,dp

    [HAOI2011]Problem c Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 949  Solved: 519[Submit][Status] ...

  6. [LeetCode] Text Justification words显示的排序控制

    Given an array of words and a length L, format the text such that each line has exactly L characters ...

  7. dedecms--数据库

    最近在用dedecms做项目,dedecms里面有数据库操作类,其实这个在实际项目中用起来还是很方便的. 1:引入common.inc.php文件 require_once (dirname(__FI ...

  8. Codeforces 404E: Maze 1D(二分)

    题意:指令“R”机器人会向右走一步,“L”是向左.起初机器人在0位置,可以在除了0以外的任何位置放障碍,如果机器人的指令将使它走到障碍上,那这一步他会保持不动.要求让机器人最终结束的那一步一定只走过一 ...

  9. 关于PHP接收HTTP模拟POST传JSON格式时$_POST为空的问题

    编写项目时需要将数据转换成json格式的字符串,并通过post传参传给后台,但在后台接收数据时发现$_POST参数为空 头部为: curl_setopt($ci, CURLOPT_HEADER, 0) ...

  10. Codeforces Gym101606 J.Just A Minim (2017 United Kingdom and Ireland Programming Contest (UKIEPC 2017))

    J Just A Minim 超级无敌大水题,但是被精度卡了一手,输出要精确到小数点后6位,我直接输出的... 代码: 1 #include<iostream> 2 #include< ...