单例模式应该是23种设计模式之中最简单也最为常用的,面试中经常考到!
那么什么是单例模式呢?
定义:一个类只有一个该类的对象,我们不能够自己去new这个对象
适用场景:这个类的唯一对象是没有状态的,通俗点说就是服务性质的对象,我们没有必要每次用它的时候去new一个这个类的一个对象,这样不仅浪费空间(矩形对象)而且完全没有必要.大家在开发J2EE的时候,应该经常使用SSH框架吧?其实我们在业务逻辑层(Spring)持有的持久层对象(Hibernate)就是典型的单例模式的运用.说到这里,我想大家都能够理解了
单例模式分为以下2种:饿汉式(饿了当然要马上吃,呵呵)和懒汉式(冬天冷了不想起来,就算饿了也不立即吃,除非实在忍受不鸟),当然这是个玩笑...
饿汉式:
package com.liu.test;
/*
* 饿汉式
*/
public class InstanceHungary {
//静态初始化
private static InstanceHungary instance=new InstanceHungary();
//私有的构造方法,不能在外部在去new这个类的对象
private InstanceHungary(){}
//提供访问单例的方法,返回这个唯一的对象
public static InstanceHungary getInstance()
{
return instance;
}
public void fun()
{
System.out.println("i will waiting for you no matter where you are!");
}
public static void main(String[] args)
{
InstanceHungary instance=InstanceHungary.getInstance();
instance.fun();
}
}
懒汉式;
package com.liu.test;
/*
* 懒汉式
*/
public class InstanceLazy {
//不再静态初始化
private static InstanceLazy instance=null;
//私有的构造方法
private InstanceLazy(){}
//提供访问单例的方法,返回这个唯一的对象
public static InstanceLazy getInstance()
{
//如果此时该类的单例对象还没有产生,我们就要new它
if(instance==null)
{
//防止多个线程同时去new
synchronized(InstanceLazy.class)
{
//防止进入synchronized的线程instance对象已经不为null
if(instance==null)
{
instance=new InstanceLazy();
}
}
}
return instance;
}
public void fun()
{
System.out.println("i will waiting for you no matter where you are!");
}
public static void main(String[] args)
{
InstanceLazy instance=InstanceLazy.getInstance();
instance.fun();
}
}
分享到:
相关推荐
代码说明见: RPCZ中的智能指针单例 http://blog.csdn.net/jq0123/article/details/44023961
先简单的介绍一下单例模式。单例模式就是在应用程序中保持某一个类实例只存在一个,而且不可以受外部环境的影响而生成这个类的第二个实例。它的优点,实际点见,如果在WEB开发中,保持单一个数据操作类实例的存在,...
这是我见过的最好的设计模式讲解资料。为什么这么说呢?因为它不像其他的书籍那样,只讲解原理,还把每个设计模式的由来动机也讲解得很详细。它的讲解思路为:模式动机->模式定义->模式结构->模式分析(即原理)->...
设计模式之 Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之 Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new 一样频繁. ...
单例模式 结构模式模型-视图-控制器 项目结构 遵循一般的gradle项目结构。 检查以获取更多信息。 项目的主类应命名为Main.java并应位于$project-name/main/src/java/io/github/halfo/目录中(因为这是build.grade的...
上百节课详细讲解,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 课程亮点: 1,知识体系完备,从小白到大神各阶段读者均能学有所获。 2,生动形象,化繁为简,讲解通俗易懂。 3,结合工作实践及分析应用...
word源码java 此项目因源码仓库维护不当,导致提交了一些 jar,zip 等格式的大文件,既无法下拉,也无法上推。...(单例模式), 在需要某个对象时只管请求, 使对象的使用效率更高. 具体到这个 Java 版本中, 利用了 Thr
改进成使用util单例模式来获取SqlSession的实例,节省资源,以及从属性文件读取信息,有利于解耦合。 4. 定义别名能让我们快速简洁的看出类型信息,省去许多写路径名的麻烦。 5. 完整的增删改查的demo。 6. 如何在...
系统地讲解了如何构建一个日常生产环境...10. 页面统一的js key-value单例模式写法,每个页面生成一个唯一的全局变量,提高js的利用效率,并且有效防止多个人员开发引起的函数名/类名冲突,并且可以更好地去维护代码
面向对象设计原则是OOPS编程的核心, 但我见过的大多数Java程序员热心于像Singleton (单例) 、 Decorator(装饰器)、Observer(观察者) 等设计模式,而没有把足够多的注意力放在学习面向对象的分析和设计上面。...
9、页面统一的js key-value单例模式写法,每个页面生成一个唯一的全局变量,提高js的利用效率,并且有效防止多个人员开发引起的函数名/类名冲突,并且可以更好地去维护代码。 10、在线系统参数配置,灵活控制常用...
写一个单例模式(遇到两次) public class Test { private Test(){} private static Test test; public static Test getInstance() { if(test==null) { test = new Test(); } return test; }} 5. //统计...