java设计模式之单例模式

来源:互联网 发布:vue.js 手风琴菜单 编辑:程序博客网 时间:2024/05/22 07:47

单例模式:整个程序只提供一个实例

分类:懒汉式、饿汉式


懒汉式:需要的时候才创建对象;

懒汉式是线程不安全的,并发环境下很可能出现多个Singleton实例,要在getInstance方法上加同步。

代码演示

public class Singleton {// 提供一个私有的静态的变量来保存当前实例private static Singleton demo;// 构造私有private Singleton() {}// 提供公共的访问入口public static synchronized  Singleton getInstance() {if (null == demo) {//即使可以不用大括号,但是为了程序的可读性还是应该加上demo = new Singleton();}return demo;}}
public class SingletonTest {public static void main(String[] args) {Singleton singleton = Singleton.getInstance();Singleton singleton1 = Singleton.getInstance();//运行后会发现两个变量的内存地址是一样的,证明是单例System.out.println(singleton);System.out.println(singleton1);}}

饿汉式: 类加载时便创建出来了,不管有没有需要;
饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的,

可用于多线程,但是不应该过多地在类加载时创建实例,因为会影响效率。

代码演示

public class Singleton2 {//静态的在类被加载的时候调用,且只加载一次;所以test唯一。public static Singleton2 test = new Singleton2();private Singleton2() {}}
public class Singleton2Test {public static void main(String[] args) {// 静态的属性可以通过类名调用Singleton2 singleton201 = Singleton2.test;Singleton2 singleton202 = Singleton2.test;//运行后会发现两个变量的内存地址是一样的,证明是单例System.out.println(singleton201);System.out.println(singleton202);}}







原创粉丝点击