单例设计模式:解决一个类在内存中只存在一个对象
思想:
1.为了避免过多创建类的对象,禁止此类以外创建对象(构造方法私有化)
2.为了类可以被使用就必须创建此类对象,只好在本类中,创建对象
3.在此类中创建的对象,怎么给此类以外的使用,所已此类必须提供返回对象的一个方法
代码体现:
1.将构造函数私有化
2.在类中创建对象
3.提供一个方法用于获取此类对象
class Single
{
/**
方式一、饿汉式
开发建议使用
*/
//1.将构造函数私有化
private Single(){}
//2.在类中创建对象
private static Single s=new Single();
//3.提供一个方法用于获取此类对象
public static Single getInstance()
{
return s;
}
/**
方式二、懒汉式
*/
private Single(){}
private static Single s=null;
//线程不安全
public static Single getInstance()
{
if(s==null)
s=new Single();
return s;
}
//加同步(效率低)
public static synchronized Single getInstance()
{
if(s==null)
s=new Single();
return s;
}
//双重判断
public static Single getInstance()
{
if(s==null)
{
synchronized(Single.class)
{
if(s==null)
s=new Single();
}
}
return s;
} private int num;
public int getNum()
{
return num;
}
public void setNum(int num)
{
this.num=num;
}
} class SingleDemo
{
public static void main (String[] args)
{
Single s1=Single.getInstance();
Single s2=Single.getInstance();
s1.setNum();
System.out.println(s2.getNum());
}
}

最新文章

  1. 谈谈asp.net MVC中的AppendTrailingSlash以及LowercaseUrls ,你还记得吗?
  2. 3.开发Java消息驱动bean实例代码
  3. python--批量下载豆瓣图片
  4. 安装centos 7后恢复windows 2008R2 (Windows7)启动项
  5. Semaphore(信号量)
  6. 2.1.5 计算机网络协议: TCP/IP
  7. struts标签小记
  8. 详细介绍dll文件是什么
  9. codeblocks中添加-std=c99
  10. Spring面向切面编程(AOP,Aspect Oriented Programming)
  11. 不用不知道 apply()与call()的强大
  12. Hibernate学习——映射关系
  13. IDE idea 更换项目的JDK步骤
  14. Java后台判断是否是ajax请求,并进行处理
  15. 获取Bing每日图片API接口
  16. 【Linux学习九】负载均衡
  17. D01-R语言基础学习
  18. 搭建Vue.js环境,建立一个简单的Vue项目
  19. 快速排序之python
  20. 使用js栈stack类的实现

热门文章

  1. codeforces gym 100345I Segment Transformations [想法题]
  2. taintCheck的实现
  3. (转)关于SimpleDateFormat安全的时间格式化线程安全问题
  4. qtp的三种录制模式(转)
  5. __attribute__ ((packed))字节对齐
  6. 路由参数 query和params
  7. poj Drainage Ditches(最大流入门)
  8. Mac os x安装IDEAL及配置JDK和Maven
  9. 【目录】sql server 性能调优
  10. Redis数据库总结