黑马程序员—java基础学习--单例设计模式
2014-10-06 12:52
381 查看
在日后的开发工作中,单例设计模式是我们必不可少的技能,掌握了单例设计模式将对我们以后的开发工作省去了不少的麻烦,同时也解决了看似困难的问题,究竟是什么样的模式有这么大的功能呢?那么,我今天总结一下单例设计模式,同时也是对以往知识的回顾。
*单例设计模式
设计模式概念:
解决某一类问题最行之有效的方法,最早起源于建筑行业。java中共有23中设计模式。
单例设计模式解决的问题:
解决一个类在内存中只存在一个对象。
保证对象的唯一性步骤:
1,为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象。
2,还为了让其他程序可以访问到该类对象,只好在本类中自定义一个对象。
3,为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
代码体现方式思路:
1,将构造函数私有化;
2,在类中创建一个本类对象;
3,提供一个方法可以获取到该对象。
单例设计模式方式一:饿汉式(开发时常用)
<span style="font-size:14px;">//饿汉式,Single类一进内存,就初始化对象
class Single{
//1,私有化构造函数
private Single(){
}
//2,创建一个本类对象
private static Single s = new Single();
//3,获取到该类对象
public static Single getInstance(){
return s;
}
}
class SingleDemo {
public static void main(String[] args) {
Single s = Single.getInstance(); //类名调用静态方法,返回为Single类型的引用。
}
}</span>
注意:
单例设计模式并非只是这三步骤就解决问题,而是大体思想是这样的,但是对于事物该怎么描述还应该怎么去描述,当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可。
单例设计模式的应用如下:
<span style="font-size:14px;">class Student{
private int age;
//私有化创建Student对象
private Student s = new Student();
//私有化构造函数
private Student(){
}
//获取到该对象
public static Student getStudent(){
return s;
}
public void setAge(ing age){
this.age = age;
}
public int getAge(){
return age;
}
}
class SingleDemo {
public static void main(String[] args) {
/*
//以前应该这么做
Student s1 = new Student();
s1.setAge(30);
Student s2 = new Student();
s2.setAge(12);
*/
Student s1 = Student.getStudent();
Student s2 = Student.getStudent();
s1.setAge(30);
System.out.println(s2.getAge());//打印结果为30,单例设计模式应用成功
}
}</span>
单例设计模式方式二:懒汉式(面试时常用)
<span style="font-size:14px;">class SingleDemo2 {
public static void main(String[] args) {
Single s = Single.getInstance();
}
}
//对象是方法被调用时,才初始化,也叫做对象的延时加载。Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象。
class Single{
//私有化构造函数
private Single(){
}
//创建本类对象,并赋值为null
private static Single s = null;
//提供获取该对象的方法
public static Single getInstance(){
if(s == null){
s = new Single();
}
return s;
}
}</span>
多线程下的懒汉式单例实际模式(知识点较多,需重点掌握)
<span style="font-size:14px;">class Single{
private Single(){
}
private static Single s = null;
public static Single getInstance(){
if(s == null){ //本次判断是否为null是为了高效
synchronized(Single.class){ //同步代码块加锁,锁的对象为Single类的字节码文件
if(s == null){
s = new Single();
}
}
}
return s;
}
}</span>
记录原则:
定义单例,建议使用饿汉式。
*单例设计模式
设计模式概念:
解决某一类问题最行之有效的方法,最早起源于建筑行业。java中共有23中设计模式。
单例设计模式解决的问题:
解决一个类在内存中只存在一个对象。
保证对象的唯一性步骤:
1,为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象。
2,还为了让其他程序可以访问到该类对象,只好在本类中自定义一个对象。
3,为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
代码体现方式思路:
1,将构造函数私有化;
2,在类中创建一个本类对象;
3,提供一个方法可以获取到该对象。
单例设计模式方式一:饿汉式(开发时常用)
<span style="font-size:14px;">//饿汉式,Single类一进内存,就初始化对象
class Single{
//1,私有化构造函数
private Single(){
}
//2,创建一个本类对象
private static Single s = new Single();
//3,获取到该类对象
public static Single getInstance(){
return s;
}
}
class SingleDemo {
public static void main(String[] args) {
Single s = Single.getInstance(); //类名调用静态方法,返回为Single类型的引用。
}
}</span>
注意:
单例设计模式并非只是这三步骤就解决问题,而是大体思想是这样的,但是对于事物该怎么描述还应该怎么去描述,当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可。
单例设计模式的应用如下:
<span style="font-size:14px;">class Student{
private int age;
//私有化创建Student对象
private Student s = new Student();
//私有化构造函数
private Student(){
}
//获取到该对象
public static Student getStudent(){
return s;
}
public void setAge(ing age){
this.age = age;
}
public int getAge(){
return age;
}
}
class SingleDemo {
public static void main(String[] args) {
/*
//以前应该这么做
Student s1 = new Student();
s1.setAge(30);
Student s2 = new Student();
s2.setAge(12);
*/
Student s1 = Student.getStudent();
Student s2 = Student.getStudent();
s1.setAge(30);
System.out.println(s2.getAge());//打印结果为30,单例设计模式应用成功
}
}</span>
单例设计模式方式二:懒汉式(面试时常用)
<span style="font-size:14px;">class SingleDemo2 {
public static void main(String[] args) {
Single s = Single.getInstance();
}
}
//对象是方法被调用时,才初始化,也叫做对象的延时加载。Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象。
class Single{
//私有化构造函数
private Single(){
}
//创建本类对象,并赋值为null
private static Single s = null;
//提供获取该对象的方法
public static Single getInstance(){
if(s == null){
s = new Single();
}
return s;
}
}</span>
多线程下的懒汉式单例实际模式(知识点较多,需重点掌握)
<span style="font-size:14px;">class Single{
private Single(){
}
private static Single s = null;
public static Single getInstance(){
if(s == null){ //本次判断是否为null是为了高效
synchronized(Single.class){ //同步代码块加锁,锁的对象为Single类的字节码文件
if(s == null){
s = new Single();
}
}
}
return s;
}
}</span>
记录原则:
定义单例,建议使用饿汉式。
相关文章推荐
- 黑马程序员_java基础学习笔记之单例设计模式
- 黑马程序员--Java基础学习笔记【单例设计模式、网络编程、反射】
- 黑马程序员——学习Java基础之 io LineNumberReader 之装饰设计模式
- 【黑马程序员】Java基础学习博客——两种设计模式
- 黑马程序员 JAVA学习笔记——java基础 单例设计模式
- 黑马程序员_Java基础_面向对象,封装,继承,单例设计模式,构造函数,构造代码块
- 黑马程序员--Java学习11--设计模式
- 黑马程序员-JAVA基础-IO流中的装饰设计模式
- 黑马程序员:Java基础总结----单例设计模式
- 黑马程序员__4java基础 静态和几种设计模式
- 黑马程序员_毕向东JAVA基础_设计模式&异常处理机制
- 黑马程序员----------java基础加强之多线程、单例设计模式
- 黑马程序员---JAVA基础JAVA23种设计模式之---单例设计模式
- 黑马程序员JAVA基础-单例设计模式
- 黑马程序员_Java基础_线程基础,创建,同步(单例设计模式的同步),死锁
- 黑马程序员 Java基础 面向对象:static关键字 main函数 单例设计模式
- 黑马程序员--Java设计模式学习(一)
- 黑马程序员_java基础复习之十常用设计模式总结
- 黑马程序员 学习笔记——Java 二十三设计模式之单例
- 黑马程序员------java学习笔记之单例设计模式