本文主要是介绍单例模式--创建型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一.什么是单例模式
单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。
在整个程序空间中,该类只存在一个实例对象。
二.为什么要使用单例模式
在应用系统开发中,
在多个线程之间,共享同一个资源或者操作同一个对象,
在整个程序空间使用全局变量,共享资源。
节省对象单创建时间。
因为在sigleton模式可以保证为一个类只生成一个唯一单实例对象,所以这些情况下单例模式可以派上用场。
代码实现一:
1.饿汉式
/*** 饿汉式*/
public class Person {//因为静态变量的常量,类加载的时候进行实例化,一份,不能改变引用private static final Person person=new Person();private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}//构造方法私有化private Person(){}//提供一个全局的静态方法//必须是静态的,如果不是静态的方法必须要对象才能被调用public static Person getperson(){return person;}
}public class TestMain {public static void main(String[] args) {Person person=Person.getperson();Person person1=Person.getperson();person.setName("张三");person1.setName("李四");System.out.println(person.getName());System.out.println(person1.getName());}
}
//李四
2.懒汉式
public class Person {private String name;//创建一个静态的对象的引用,static 是为了类加载的加载private static Person person;public String getName() {return name;}public void setName(String name) {this.name = name;}//构造方法私有化private Person(){}//判断这个静态的引用是否为空public static Person getPerson(){if(person==null){person=new Person2();}return person;}}
public class TestMain2 {public static void main(String[] args) {Person person=Person.getPerson();Person person1=Person.getPerson();person.setName("张三");person1.setName("李四");System.out.println(person.getName());System.out.println(person1.getName());}
}
//李四
饿汉式和懒汉式比较
饿汉式,在类加载的时候只有一份,
懒汉式,在单线程是可以保证,
在多线程饿汉式可以保证,懒汉式不可以保证。
多线程的时候可以用两种方式保证一份。
1.全局静态方法。同步方法
1.同步方法–锁
//判断这个静态的引用是否为空public static synchronized Person getPerson(){if(person==null){person=new Person();}return person;}
2.在内部方式加锁
public static Person getPerson(){if(person==null){synchronized (Person.class){person=new Person();}}return person;}
这篇关于单例模式--创建型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!