黑马程序员:Java设计模式之单例设计模式的实现
来源:互联网 发布:机房环境监控软件 编辑:程序博客网 时间:2024/06/16 19:20
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
设计模式:解决某一类问题最行之有效的方法。
Java中有23种设计模式,单例设计模式只是其中一种
单例设计模式:解决一个类在内存中只存在一个对象
如何保证一个类在内存中只存在一个对象?
- 为了避免调用者建立多个对象,先禁止调用者建立该对象
- 为了方便调用者使用该类对象,在本类中建立一个私有对象并提供调用者一个访问方法
代码实现过程示例:
- 第一种方式:先初始化对象,称为饿汉式,开发一般用这种形式1234567891011121314151617181920212223242526272829
class
Single
{
private
int
age;
public
void
setAge(
int
age)
{
this
.age = age;
}
public
int
getAge()
{
return
this
.age;
}
private
Single(){}
//将构造函数私有化,禁止其他类创建Single对象
private
static
final
Single s =
new
Single();
//本类中自定义的一个对象
public
static
Single getInstance()
//为其他类提供访问Single对象的方法,因不能通过对象的方式访问,故只能通过静态化方法通过类直接访问。
{
return
s;
}
}
class
SingleDemo
{
public
static
void
main(String[] args)
{
Single s = Single.getInstance();
Single s1 = Single.getInstance();
s.setAge(
30
);
System.out.println(s1.getAge());
//结果为30,证明内存中只存在一个对象,否则返回结果为0.
}
}
- 第二种方式:对象在方法被调用时,才初始化,也叫做对象的延时加载。称为懒汉式
懒汉式单例设计模式的写法常在面试中出现,并会提出解决懒汉式CPU未及时处理导致创建对对象问题的方法。使用synchronized关键字解决。123456789101112131415161718192021222324252627282930313233343536373839404142434445class
Single
{
private
int
age;
public
void
setAge(
int
age)
{
this
.age = age;
}
public
int
getAge()
{
return
this
.age;
}
private
Single(){}
//将构造函数私有化,禁止其他类创建Single对象
private
static
Single s =
null
;
public
static
Single getInstance()
//为其他类提供访问Single对象的方法,因不能通过对象的方式访问,故只能通过静态化方法通过类直接访问。
{
/*
if(s==null)
//若CPU处理在这个位置停止处理的时候,另一个用户进来很可能创建对象,而原来停止处理的用户恢复之后又会创建对象。导致内存中不仅仅存在一个对象。
s = new Single(); //当调用方法时,才创建对象,并把对象内存地址值赋给s
return s;
*/
//解决上面代码中有可能出现的问题:当多用户使用该方法时,CPU来不及处理导致创建多个对象
if
(s==
null
)
{
synchronized
(Single.
class
)
//synchronized 同步锁的功能,当使用该关键字的范围内有用户在处理数据时,另一个用户不允许进入处理。
{
if
(s==
null
)
s =
new
Single();
}
}
return s;
}
}
class
SingleDemo
{
public
static
void
main(String[] args)
{
Single s = Single.getInstance();
Single s1 = Single.getInstance();
s.setAge(
30
);
System.out.println(s1.getAge());
//结果为30,证明内存中只存在一个对象,否则返回结果为0.
}
}
以上代码通过思想形式展现如下:
- 将构造函数私有化:防止调用者创建该类对象
- 在类中创建一个本类对象
- 提供一个方法让调用者可以获取到该对象
- 黑马程序员:Java设计模式之单例设计模式的实现
- 黑马程序员-java设计模式之单例模式
- 黑马程序员-Java设计模式之单例模式解析
- 黑马程序员-之单例设计模式
- 黑马程序员---单例设计模式【java】
- 黑马程序员-Java单例设计模式
- 黑马程序员----java单例设计模式
- 黑马程序员--java单例设计模式
- 黑马程序员-java单例设计模式
- 黑马程序员--java 单例设计模式
- 黑马程序员---java单例设计模式
- 黑马程序员-设计模式之单例设计模式
- 黑马程序员_Java设计模式之单例设计模式
- 黑马程序员------java学习笔记之单例设计模式
- 黑马程序员-------Java基础之单例设计模式
- 黑马程序员--Java之单例设计模式01
- 黑马程序员Java学习笔记之单例设计模式
- 黑马程序员-JAVA基础之单例设计模式
- android语言 区域 简写(转载)
- 利用AIDL来实现由Binder进行进程间通信(IPC)
- HashSet用法
- ubuntu9.10编译安装gcc
- Debug和Release版本的区别
- 黑马程序员:Java设计模式之单例设计模式的实现
- CecureCRT连接问题
- mustache 例子
- 进入大学的第一篇博客
- CT跟踪
- java基础<网络编程>
- windows7添加环境变量
- 黑马程序员_File总结2
- 第27期状元简讯:阿里妈妈推出“智无线” 定位无线推广营销