Android开发之单例模式初探(源代码分享)

单例模式是什么呢?是Java23中模式之一,在Android开发中也有着广泛的运用,比如Calander类,在创建对象的时候并不是通过 new Calander而是Calander.getInstnce(),这就是单例模式的一种运用,应用的场合是什么呢?我们在很多时候有些对象只需要一个就够了,并不需要多个,就比如古代的皇帝,一山不容二虎,老虎多了只有坏处没有好处。它的作用就是保证整个应用程序中某个实例有且只有一个,one  is all!

单例模式呢分为两种一个是饿汉模式一个是懒汉模式,让我们先来看一下饿汉模式和懒汉模式分别是什么把!

先来看看饿汉模式的庐山真面目吧!

public class Singleton {
	//1.将构造方法私有化,不允许外部直接创建对象
	private Singleton(){
	}

	//2.创建类的唯一实例,使用private static修饰
	private static Singleton instance=new Singleton();

	//3.提供一个用于获取实例的方法,使用public static修饰
	public static Singleton getInstance(){
		return instance;
	}
}

为了不让该类能构造出多个对象,饿汉模式第一步将构造方法私有化了,不允许外部直接创建对象。第二步再创建该类的唯一实例,并用private static修饰,通过getInstance()方式返回,保证了调用类不能对该类随意修改。饿汉模式的最大特点呢,是只要类开始加载,就会创建对象。

再来看下懒汉模式

public class Singleton2 {
	//1.将构造方式私有化,不允许外边直接创建对象
	private Singleton2(){
	}

	//2.声明类的唯一实例,使用private static修饰
	private static Singleton2 instance;

	//3.提供一个用于获取实例的方法,使用public static修饰
	public static Singleton2 getInstance(){
		if(instance==null){
			instance=new Singleton2();
		}
		return instance;
	}
}

我们可以看到懒汉模式和饿汉模式大致形同,唯一不同的是在第二步只声明类并不创建对象。

最后我们总结下两者的区别:

饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全。
        懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,线程不安全。多线程操作的时候要注意!

Android开发之单例模式初探(源代码分享)

时间: 2024-08-02 11:04:58

Android开发之单例模式初探(源代码分享)的相关文章

Android开发之适配器模式初探

我们在开发Android的时候经常通过Adapter把数据和UI对象连接在一起,spinner.ListView之类的控件都可以用适配器来自定义其组建,使其更加丰富.适配器模式是将两个不兼容的类纠合在一起使用,属于结构型,需要有Adaptee(被适配者)和Adaptor(适配器)两个身份.简单的来说,就是你有一个机器人是只会踢足球的,另一个机器人只会打篮球的,然后你想有让他既会踢足球又会打篮球,那他的芯片里要将这两种方法都集合在一起,可我们又不知道原来的踢足球和打篮球的方法是怎么写的,也不想改啊

Android开发 - ActivityLifecycleCallbacks用法初探

ActivityLifecycleCallbacks是什么? Application通过此接口提供了一套回调方法,用于让开发人员对Activity的生命周期事件进行集中处理. 为什么用ActivityLifecycleCallbacks? 以往若需监測Activity的生命周期事件代码,你可能是这样做的.重写每个Acivity的onResume(),然后作统计和处理: @Override protected void onResume() { super.onResume(); //TODO 处

Android开发中用友盟做分享的一些坑

仅限于用5.1.4版本的 按照友盟分享的API在自己的代码中修改: 1.微信分享需要打包APK文件,数字签名与微信开发申请的要一致 2.此name中属性不能修改 value为友盟的申请的appkey <meta-data   android:name="UMENG_MESSAGE_SECRET"    android:value="******************************" > 3.做微博分享时:libs里面添加SocialSDK_S

Android开发:带动画的分享效果

这几天做了个带动画的分享页面,现在把它分享出来,如果你觉得有用,请直接使用,避免重复造轮子 先看下效果图 觉得只是看效果图不明显,那么用手机扫描下面的二维码下载安装包: 这个效果本身没有什么特别的难度,都是用Animator实现的,只是动画效果的代码量有点多,因为分享模块一般都会做,把这个分享出来,想要用的话,就不要重复写这么多行代码了 对于熟悉Animator的人,下面的代码可以略过了 我来看下主要的实现代码,完整的代码看底部的项目Github地址 1. 我用了一个方法,实现进入的效果,加上判

android开发环境IDE跳楼大分享

先上下载链接:http://pan.baidu.com/s/1tsEjO 1.eclipse的颜色主题包 2.android Sdk的全部 3.android Studio1.0稳定版的安装包

Android开发遇到的坑-----微信分享问题

问题 近日由于客户对微信分享后的样式不满意,所以对微信分享的标题.内容.图片进行修改,仅仅改了这个东西,微信分享就突然不能用了,点击没有任何效果 原因 经过推测,肯定不会是描述文字和标题方面的原因,那么就是图片了,网上搜索了一下,微信分享的图片不能超过32k,由于之前一直用的图标比较小,所以一直没遇到这个问题 解决办法: 找设计将图片压缩到了合格范围内,但是仍然无效,查看图片大小,宽高为600+ x 400+,而原来能够成功分享的图片宽高为108x108,所以再次修改图片宽高,问题解决~! PS

《Netty权威指南》私有协议开发的可运行源代码分享

之前看了<Netty权威指南>一书,第14章用整个章节介绍了如何设计和实现一个简单的私有协议,内容很好,但是作者提供的代码片段有很多错误,根本不可能正确编译. 比如MarshallingEncoder这个类是Netty提供了JBoss Marshalling的一个适配类,它的encode方法是protected,不是public,并且其中用到的ChannelBufferByteOutput类是包类可见,外部无法引用的.Netty只所以这么设计,是因为这个工具类不能直接被外部使用,只是给它内部

Android开发中遇到的问题和解答汇总

如何在ViewPager中的各个Fragment间传递数据并刷新Fragment界面?<点击查看详情> android Intent 本身就可以附加数据 为何还用 bundle?<点击查看详情> android 做一个pdf阅读器项目,求思路<点击查看详情> iOS 和 Android 应用内部集成分享按钮的问题<点击查看详情> 保存在Application子类中的全局变量什么情况下会丢失?<点击查看详情> 如何理解这句话,安卓的,query参数

Android开发之自定义TabHost文字及背景(源代码分享)

使用TabHost 可以在一个屏幕间进行不同版面的切换,而系统自带的tabhost界面较为朴素,我们应该如何进行自定义修改优化呢 MainActivity的源代码 package com.dream.ledong; import android.app.TabActivity; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.view.Gr