单例模式代码
来源:互联网 发布:大富翁数据 编辑:程序博客网 时间:2024/05/16 11:38
单例模式作为Java和Android中使用最广发的设计模式,了解它对于我们设计出优秀的代码有很大的帮助。针对之前的文章进行更加详细的补充,也推荐大家前去学习《大话设计模式》和《Android源码解析和设计模式》这两本书。对于初学者学习设计模式很有帮助。
言归正传。
单例模式的定义
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
使用场合
不能自由构造对象的情况下(比如,某个类实例一次会消耗很多资源,如要访问IO和数据库资源,考虑使用单例模式)
单例模式特点
①构造方法(函数)被私有化(private);
②只能通过getInstance()方法取得Singleton(单例)类的实例化对象;
③不管外部如何操作,最终也只有一个实例化对象;
④在单例设计模式中一定会存在一个static方法,用于取得本类的实例化对象。
package com.test6;public class TestDemo {public static void main(String[] args) {Singleton inst=null; //声明对象inst=Singleton.getInstance();// 利用“类.static 方法()”取得实例化对象inst.print();//调用方法}} //定义一个类,单例模式之饿汉单例模式 class Singleton{ private static Singleton instance=new Singleton(); private Singleton() { //构造方法私有化}public void print(){System.out.println("Hello Java");}//公有的静态函数,对外暴露获取单例对象的接口//通过该静态方法返回一个静态对象instance public static Singleton getInstance() { //get方法,取得本类对象 return instance; } }
单例模式之懒汉单例模式
public class Singleton{private static Singleton instance;private Singleton(){}public static synchronized Singleton getInstance(){if(instance == null){instance = new Singleton();}return instance;}}
懒汉模式是声明一个静态对象,并在用户第一次调用getInstance时进行初始化,上面的饿汉模式是在声明静态对象时就已经初始化。(不推荐使用该模式)
单例模式之DCL单例模式(推荐使用)
public class Singleton{ //在JDK是1.5或之后的版本,下面的①改为private volatile static Singleton mInstance = null; private static Singleton mInstance = null;//①private Singleton(){}public void doSomething(){}public static Singleton getInstance(){//第一次判断为了避免不必要的同步if(mInstance == null){synchronized(Singleton.class){if(mInstance == null){//为了在null的情况下创建实例mInstance = new Singleton();}}}return mInstance;}}
//静态内部类单例模式public class Singleton{private Singleton(){}public static Singleton getInstance(){return SingletonHolder.sInstance;}/*****/静态内部类private static class SingletonHolder{private static final Singleton sInstance = new Singleton();}}
1 0
- 单例模式代码
- 单例模式 代码
- 单例模式通用代码
- c#单例模式代码
- 单例模式C++代码
- 单例模式代码示例
- 单例模式代码实例
- 单例模式的代码
- java单例模式代码
- 单例模式通用代码
- 单例模式代码分析
- 单例模式java代码
- 单例模式代码块
- 单例模式代码示例
- 单例模式代码例子
- 设计模式之单例模式(代码)
- 单例模式的C++代码
- 单例模式的简单代码实现
- Android API Guides---Supporting Multiple Screens
- 自己实现简单shell的小例子
- 进制转换---由任意进制转为任意进制---NOJ1592
- POJ 2411 Mondriaan's Dream
- webservice 使用vs2005生成代理
- 单例模式代码
- 实现画布的效果
- java--Servlet操作注意事项
- hdu 5667 Sequence(矩阵快速幂)
- R语言向量、矩阵用法 第一节
- [LintCode] 快速幂 Fast Power
- java设计模式之简单工厂模式
- java并发-ThreadLocal
- Linux内核学习总结