JAVA_SE基础——38.单例设计模式
本文继续介绍23种设计模式系列之单例模式。
我们在javaSE的基础学习中,会讲到:单例设计模式、模板设计模式、装饰者设计模式、观察者设计模式、工厂设计模式
我以后随着水平的提高,我会专门开个分类写设计模式的。现在请原谅我的知识面有限……
设计模式→中的 “模式” 二字是什么意思。。
模式:模式就是解决 一类 问题的固定步骤 。
模式的概念最早起源于建筑行业....
建房子的步骤都是一样子:
打地基-----> 浇柱子------->盖楼面--------->砌墙--------->封顶---->装修-----入住
单例设计模式:保证一个类在内存中只有一个对象。
首先来明确一个问题,那就是在某些情况下,有些对象,我们只需要一个就可以了,
比如,一台计算机上可以连好几个打印机,但是这个计算机上的打印程序只能有一个,
这里就可以通过单例模式来避免两个打印作业同时输出到打印机中,
即在整个的打印过程中我只有一个打印程序的实例。简单说来,单例模式(也叫单件模式)的作用就是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个(当然也可以不存在)。
单例设计模式有两种: (但是写法很多种)
饿汉单例设计模式
1. 私有化构造函数。
2. 声明本类的引用类型变量,并且使用该变量指向本类对象。
3. 提供一个公共静态的方法获取本类的对象。
懒汉单例设计模式:
1. 私有化构造函数。
2. 声明本类的引用类型变量,但是不要创建对象,
3. 提供公共静态 的方法获取本类 的对象,获取之前先判断是否已经创建了本类 对象
,如果已经创建了,那么直接返回对象即可,如果还没有创建,那么先创建本类的对象,
然后再返回。
推荐使用: 饿汉单例设计模式。 因为懒汉单例设计模式会存在线程安全问题,目前还不能保证一类在内存中只有一个对象。 但是也要熟悉懒汉单例模式,因为面试经常会面这个。。
测试代码1:(饿汉单例模式):
//饿汉单例设计模式 ----> 保证Single在在内存中只有一个对象。
class Single{ //声明本类的引用类型变量,并且使用该变量指向本类对象
private static Single s = new Single(); //私有化构造函数
private Single(){} //提供一个公共静态的方法获取本类的对象
public static Single getInstance(){
return s;
}
}
class Demo2
{
public static void main(String[] args)
{
Single s1 = Single.getInstance();
Single s2 = Single.getInstance();
System.out.println("是同一个对象吗?"+ (s1==s2));
}
}
运行结果:
测试代码2:(懒汉单例模式):
//饿汉单例设计模式 ----> 保证Single在在内存中只有一个对象。
class Single{ //声明本类的引用类型变量,并且使用该变量指向本类对象
private static Single s = null; //私有化构造函数
private Single(){} //提供一个公共静态的方法获取本类的对象
public static Single getInstance(){
if(s==null){
s = new Single();
}
return s;
}
}
class Demo2
{
public static void main(String[] args)
{
Single s1 = Single.getInstance();
Single s2 = Single.getInstance();
System.out.println("是同一个对象吗?"+ (s1==s2));
}
}
运行结果:
懒汉式单例模式 ……关于线程问题也要等我再深入学习我才懂(我自己都没学到多线程)
反正这篇blog 就当作是入门文档了,不能当最终版本的,因为我的知识面有限,抱歉。关于单列模式的东西 目前我也才学到这些,期待我的文章的人,可以粉我,到时我会专门开个分类来详细的写设计模式的 。。
JAVA_SE基础——38.单例设计模式的更多相关文章
- python基础之单例设计模式
class Player(): instance = None init_flag = False def __init__(self): if self.init_flag is False: pr ...
- Java 基础入门随笔(10) JavaSE版——单例设计模式
设计模式:对问题行之有效的解决方式.其实它是一种思想. 1.单例设计模式. 解决的问题:就是可以保证一个类在内存中的对象唯一性.(单个实例) 使用单例设计模式需求:必须对于多个程序使用同一个配置信息对 ...
- Java基础 static限定符的使用 以及【 static实现的 singleton(单例)设计模式】
static实现的 singleton(单例)设计模式 /** static实现的 singleton设计模式 , 使得一个类只能够创建一个static对象 */ 模板设计结构: package Co ...
- python基础--反射、元类、单例设计模式
反射:reflect,反射指的是一个对象应该具备可以检测.修改.增加自身属性的能力,反射就是通过字符串操作属性 hasattr(对象,带查询的属性名称) 判断某个对象中是否存在某个属性 getattr ...
- 零基础学习java------day8------javabean编写规范,继承,static关键字,代码块,单例设计模式
0. 今日内容提要 1. javabean书写规范 javabean:一个普通的类,用来描述事物的类,里面不包含任何的业务逻辑,只是用来存储数据. 比如:Teacher,Student,Mobile. ...
- iOS 中的单例设计模式
单例设计模式:在它的核心结构中只包含一个被称为单例类的特殊类.例如文件管理中的NSUserDefault,应用程序中的UIApplication,整个应用程序就这一个单例类,负责应用程序的一些操作,单 ...
- 单例设计模式 --c#
单例设计模式:在单例设计模式中我们要保持对象始终是唯一的 参考代码: class SingleObject { private SingleObject() { } private static Si ...
- Java 之单例设计模式
设计模式: 对问题行之有效的解决方式, 其实它是一种思想. 单例设计模式 解决的问题:就是可以保证一个类在内存中的对象唯一性. 即单个实例. 比如对于A 和 B 两个程序使用同一个配置信息对象时, A ...
- Java设计模式之单例设计模式 入门实例
一.基础概念 (1).单例设计模式:保证一个类在内存中的对象唯一性. (2).应用场景:数据都存储在配置文件的对象中,多个程序对同一个配置文件的对象进行操作.一个程序要基于另一个程序操作后的结果进行操 ...
随机推荐
- Filter的过滤链理解
一.Filter过滤链 web.xml配置了filter过滤器,在容器启动的时候执行了init()方法进行了初始化,然后在容器关闭的时候执行了destroy()方法销毁过滤器,在每次服务器接受请求的时 ...
- ValueError: Cannot feed value of shape ..
这里x_,y_是两个数字,当我运行时 with tf.Session() as sess: #定义session对象生成器 for step in range(201) : sess.run(trai ...
- AIX分页(交换)空间的监控
1.分页和交换 这两个概念,很多人混为一回事儿,两者虽然有共性,但也有些差别.分页是进程的部分内容在RAM和磁盘的分页空间间移动,而交换是整个进程在RAM和磁盘的分页空间间移动,在将进程移到磁盘分页空 ...
- freemarker的classic_compatible设置,解决报空错误
前段时间接触freemaker时,本来后端写各接口运行正常,但加入了模板后,频繁报空指针问题,整了许久,最后还是请教了别人解决了这个问题,现在记录下来,方便以后碰到了可以查阅. 错误样例如下: ERR ...
- UWP 圆形菜单
用过Surface dial的童鞋们都很熟悉,当使用Dial的时候,那个圆形菜单很漂亮,那么我们在普通的uwp中是否也可以实现吗? 答案是肯定的. 其实这是来源于GayHub的一个开源项目,做的很不错 ...
- 2016最热门的PHP框架
每个PHP框架都拥有各自独特的地方.同时PHP语言已经获得了巨大的认同并且成为了世界上最通用的服务器脚本语言.PHP也俨然成为了最容易学习的web动态开发语言.在PHP发展的同时,PHP框架也迅速崛起 ...
- python 装饰器 一篇就能讲清楚
装饰器一直是我们学习python难以理解并且纠结的问题,想要弄明白装饰器,必须理解一下函数式编程概念,并且对python中函数调用语法中的特性有所了解,使用装饰器非常简单,但是写装饰器却很复杂.为了讲 ...
- NodeJS定时任务
在实际开发项目中,会遇到很多定时任务的工作.比如:定时导出某些数据.定时发送消息或邮件给用户.定时备份什么类型的文件等等 一般可以写个定时器,来完成相应的需求,在node.js中自已实现也非常容易,接 ...
- 大数据 --> 淘宝异构数据源数据交换工具 DataX
淘宝异构数据源数据交换工具 DataX DataX是什么? DataX是一个在异构的数据库/文件系统之间高速交换数据的工具,实现了在任意的数据处理系统(RDBMS/Hdfs/Local filesys ...
- super、this
1)super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句) 2)this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句) 3)super: 它引用当前对 ...