Java设计模式之单例模式(恶汉式和懒汉式)

作者:网络    软件教程库   2020-05-18

/*
* 单例模式:
* 饿汉式:类一加载就创建对象
* 懒汉式:用的时候,才去创建对象
* 面试题:单例模式的思想是什么?写一个代码体现(我们最好写懒汉式的单例模式给面试官,这个才是他想要的答案)
* 开发使用:恶汉式(是不会出问题的单例模式)
* 面试时写懒汉式(可能会出现问题的单例模式)
* a:懒汉式(延迟加载)
* b:线程安全问题
* a:是否多线程环境 是
* b:是否有共享数据 是
* c:是否有多条语句操作共享数据 是

*/


单例模式的一般步骤:

1、私有化构造方法使其外部不能直接创建对象保证对象的唯一性

2、私有化和静态化自己内部的对象(因为外部不能new对象只能内部来new了)

3、提供一个公共的静态的方法给外部直接使用自己内部创建的对象


单例模式之恶汉式源代码:

package 创建型_单例模式_饿汉式;
/*
 * 单例模式之恶汉式:类一加载就创建对象
 */
public class student {
	//构造方法私有为了保证外部不能new对象,确保唯一性(单例)
	private student(){
		
	}
	//外部不能new对象,只能自己内部new一个student对象了
	//这个要static化,因为下面要提供一个static方法对外界直接访问,而static方法只能访问static成员
	//而且为了外部不能修改这个对象为null(student.student=null,没意义),所以这个对象也要private
	 private static student student = new student();
	
	//提供公共的访问方式,内部new的对象为了外部使用许提供一个public方法获取对象实例
	//但是注意因为外部不能new对象,则不能通过对象名.方法获取student类的内部实例,所有要把这个公共方法静态化statis
	//static化之后因为static方法不能直接方法普通成员方法,只能访问静态成员,所以要将new的对象static话
	public static student getstudent(){
		return student;
	}

}

package 创建型_单例模式_饿汉式;

/*
 * 單例模式:保证类在内存中只有一个对象
 * 
 * 如何保证泪在内存中只有一个对象呢
 * 	a:把构造方法私有化
 * 	b:在成员位置自己创建一个对象
 * 	c:通过一个公共的方法提供访问
 */

public class studentmain {
	public static void main(string[] args) {
//		student student = new student();
//		student student2 = new student();
//		system.out.println(s1==s2);//false;
		
		//通过单例如何得到对象呢
		
//		student.student=null;//这个说明外部把内部的成员修改了,所以内部的成员要private话
		student student = student.getstudent();
		student student2 = student.getstudent();
		system.out.println(student==student2);
		
		system.out.println(student);
		system.out.println(student2);
	}

}

单例模式之懒汉式源代码:

package 创建型_单例模式_懒汉式;

/*
 * 单例模式:
 * 		饿汉式:类一加载就创建对象
 * 		懒汉式:用的时候,才去创建对象
 * 面试题:单例模式的思想是什么?倾斜一个代码体现
 * 		开发使用:恶汉式(是不会出问题的单例模式)
 * 		面试时写懒汉式(可能会出现问题的单例模式)
 * 			a:懒汉式(延迟加载)
 * 			b:线程安全问题
 * 				a:是否多线程环境   是
 * 				b:是否有共享数据  是
 * 				c:是否有多条语句操作共享数据  是
 */
public class teacher {

	//私有构造方法
	private teacher(){
		
	}
	//私有  static teacher类对象的引用teacher  需要的时候才new对象,初值为null
	private static teacher teacher = null;
	
	public synchronized static teacher getteacher(){
		//t1  t2  t3
		if(teacher==null){//t1判断为空进去new一个对象,然后轮到t2进去,又new一个对象出来。。。。所以线程不安全,在面试的时候就要加上synchronized同步操作
			//t1  t2  t3
			teacher = new teacher();
		}
		return teacher;
	}
}
package 创建型_单例模式_懒汉式;

public class teachermain {
	public static void main(string[] args) {
		
		teacher teacher = teacher.getteacher();
		teacher teacher2 = teacher.getteacher();
		system.out.println(teacher==teacher2);
		
		system.out.println(teacher.tostring());
		system.out.println(teacher2);
		
		//output:
		/*
		 *  true
			创建型_单例模式_懒汉式[email#160;protected]
			创建型_单例模式_懒汉式[email#160;protected]
		*/
	
	}

}




java设计模式之单例模式(恶汉式和懒汉式)

原文地址:http://blog.csdn.net/u012110719/article/details/45437439

软件教程库 该篇文章地址:https://www.itjcku.com/9999/1091487.html

阅读全部内容


Tags:设计模式恶汉以及懒汉

返回首页



推荐内容

Html简单介绍

1、html--- hypertext markup language 的缩写 --- 超文本 标记 语言. 这个技 ...

configure:error:youmustconfigureinaseparatebuilddirectory

configure glibc-2.14 时出现以下错误: [[email#160;protected] opt]# ...

kohana框架生成feed

创建feed feed::create()斱法用给定癿参数杢创建 rss戒者 atom feed。下面是可接叐癿参数。 ...

用USB安装linux

手边没有光驱,安装ubuntu可以用 linuxlive usb creator 2.9.3,在百度网盘里有的。http ...

一个复杂子查询SQL优化

select * from test.vmark vk where id in (select v.id ...

Java多线程中常见的几个问题

我们都知道,在java中要想实现多线程,有两种手段,一种是继续thread类,另外一种是实现runable接口。  1. ...

OracleDataIntegrator12c-CreatingaCollocatedAgent

http://www.oracle.com/webfolder/technetwork/tutorials/obe/fm ...

CompilingGCC5onOSX

compiling gcc 5 on os x */--> pre.src {backgro ...

查看Linux上MySQL版本信息

如果mysql是用rpm或者yum安装的,可用 #rpm -qa|grep mysql查看. 如: [[email#16 ...

《赢在测试2-中国软件测试专家访谈录》读书笔记

《赢在测试2-中国软件测试专家访谈录》读书笔记 2015-04-30 测试人物经历与观点 1.董杰 百度测试架构师 董杰 ...

Objective-C的KVC和KVO

字面意思分别是: kvc是指key value coding,键值编码。 kvo是指key value observin ...

20150502调试分析之使用gdb远程调试ARM开发板

20150502 调试分析之 使用gdb远程调试arm开发板 2015-05-02 lover雪儿 今天我们要学习 ...

限制Apache日志access.log文件大小

可以在apache的httpd.conf配置文件中配置apache自带的程序rotatelogs的功能。 rotate ...

UVa11561-GettingGold

题目:给你一个二维的地图,里面有陷阱‘t‘,金子‘g‘以及墙壁‘#‘,和普通的道路‘.‘,现在已知一个人在起点‘p‘; ...

configure:error:cannotcomputesuffixofobjectfiles:cannotcompile

centos 6.5下安装gcc-4.8.4 make的时候提示以下错误: configure: error: can ...

我读的第一本书《梦断代码》

一切都是兴趣所在,兴趣才是发展的动力,虽然我们在这个开发过程中不可否认的会遇到挫折、瓶颈,但我认为,地狱与天堂共存 ...

iOS中定时器NSTimer的使用

ios中定时器nstimer的使用 1、初始化 + (nstimer *)timerwithtimeinterval:( ...

数组遍历二叉

//任务二叉树遍历 void cmission::initmission(dword base) { cha ...

Oracle基础<1>--数据库设计

一:为什么需要使用数据库设计   数据库设计可以使数据库通过健壮的数据库结构 高效并且健康 的进行工作。 二.数据库设计 ...

LinuxShell之七函数应用

函数是什么?函数是一些命令的集合,使用一个名称做代表,称为函数名称。函数名称的命名规则和变量相同。一旦函数定义好了,执行 ...

SkillButton技能冷却

#pragmaonce #include"cocos2d.h" using_ns_cc; classskillbutto ...

sles11启用Xmanager

一:开启xmanager要满足一下2个条件:1.安装了gnome桌面环境,并且默认启动级别为52.ip地址为固定ip地址 ...

linux软件管理之rpm、yum

应用程序: 程序:architecturec语言:源代码——》(编译)二进制格式脚本:解释器(二进制程序)源代码——》编 ...

MyEclipse2014下搭建Android开发环境

1、下载android-sdk_r24.1.2-windows.zip,将其解压到一个文件夹中,例如:d:\progra ...

LinuxShell之八转向的用法

一、文件代码“转向”的意思是说:原本应由标准输入(如键盘)读取数据的,改由其它文件读取;原本应把结果显示在标准输出(如屏 ...

Java中有关null的9件事

java中有关 null 的9件事 对于java程序员来说,null是令人头痛的东西。时常会受到空指针异常(np ...

LDAP账号同步和Windows域集成验证

#65279;#65279; paradise.ezla.com.tw/files/article/html/32/32 ...

在同一个sql语句中如何写不同条件的count数量(转)

select sum(case when (t.条件字段=‘00‘) then 1 else 0 ...

详解MessageBox(),MsgBox函数的正确使用

//或者使用chr(13),chr(10)效果一样 msgbox aamp;chr(13)amp;bamp;chr( ...

swift学习笔记5

五、集合 数组 1、泛型 arraylt;类型gt; 2、简化[类型] var myar:arraylt;stringg ...


本网站部分内容来自互联网,版权归原作者所有,文章内容仅代表原作者个人观点。如有侵权请联系我们删除 电子邮件 itjcku@foxmail.com