单例模式:饿汉式与懒汉式

单例模式

唯一的实例

注意:私有化构造器自行创建(含有一个该类的静态变量来保存唯一实例)必须自行向整个系统提供这个实例(对外提供获取该实例对象的方式:1、直接暴露2、静态变量的get方法获取)

几种常见形式

饿汉式:直接创建对象,不存在线程安全问题

直接实例化饿汉式简洁直观

枚举式 最简洁

静态代码块饿汉式 适合复杂实例化

饿汉式方式一:

public class Singleton1 {    public static final Singleton1 SINGLETON1 = new Singleton1();    private Singleton1() {    }}

饿汉式方式二:

public enum Singleton2 {    SINGLETON;}

饿汉式方式三:

public class Singleton3 {    public static final Singleton3 SINGLETON3;    private String info;    static {        try {            Properties properties = new Properties();            properties.load(Singleton3.class.getClassLoader().getResourceAsStream("singleton.properties"));            SINGLETON3 = new Singleton3(properties.getProperty("info"));        } catch (IOException e) {            // TODO Auto-generated catch block            throw new RuntimeException(e);        }    }    private Singleton3(String info){        this.info= info;    }    @Override    public String toString() {        return "Singleton3 [info=" + info + "]";    }    public String getInfo() {        return info;    }    public void setInfo(String info) {        this.info = info;    }}

懒汉式:延迟创建对象

线程不安全 适用于单线程

线程安全 适用于多线程

静态内部类形式 适用于多线程

线程安全

public class Singleton4 {    private static Singleton4 singleton4;    private Singleton4() {    }    public static Singleton4 getSingleton() {        if (singleton4==null) {            synchronized (Singleton4.class) {

                if (singleton4 == null) {                    return singleton4 = new Singleton4();                }            }        }        return singleton4;    }}

静态内部类方法

public class Singleton5 {    private Singleton5(){    }    private static class Single{        private final static Singleton5 SINGLETON = new Singleton5();    }    public static Singleton5 getSingleton() {        return Single.SINGLETON;    }}

总结

饿汉式:枚举形式最简单

懒汉式:静态内部类形式最简单

原文地址:https://www.cnblogs.com/1012dk/p/10915409.html

时间: 2024-11-29 13:40:17

单例模式:饿汉式与懒汉式的相关文章

设计模式-单例模式(饿汉式及懒汉式的Java实现)

单例模式 单例模式在程序设计中使用的频率非常之高,其设计的目的是为了在程序中提供唯一一个对象(保证只被构造一次),例如写入日志的log对象,windows的任务管理器实现(只能打开一个).这里主要介绍单例模式使用Java的实现(包括饿汉式及懒汉式). 实现 这里使用Log类作为例子,Log对象需要在程序中只有一个对象且只初始化一次. 饿汉式 饿汉式的单例模式理解起来是比较容易的,就是在单例类加载的时候就初始化需要单例的对象.实现也比较容易. public class Singleton{ pri

java学习之单例模式(饿汉式与懒汉式)

---恢复内容开始--- 设计模式:解决某一类问题最行之有效的方法 java中有23种设计模式 今天学习其中一种:单例设计模式:解决一个类在内存只存在一个对象 想要保证对象唯一. 1.为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象 2.还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象 3.为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式 这三部分用代码体现: 1.将构造函数私有化 2.在类中创建一个本类对象 3.提供一个方法可以获取到该对象 packag

单例模式 饿汉式 ARC

有了前两篇的文章这里直接给出代码,这种方法不是纯粹的饿汉式,比较懒汉式代码会容易一点点,但是苹果官方不推荐,了解一下就好. 此时没有多线程的困扰,使用之前就创建一个单例对象,此时还没有线程.所以不需要加锁. static id _instance = nil; +(void)load{//该类加载之后load就会被自动调用, _instance = [[self alloc] init]; } alloc new 都会来到这里,所以在这里重写更合适. + (id)allocWithZone:(s

Java-Singleton(单例创建-饿汉式,懒汉式)

package com.easygo.singleton; /** * Java单例有两种方式,饿汉式和懒汉式,饿汉式是在对象创建之前加载,优先于对象,而懒汉式是在对象创建完成后调用对象的方法来创建对象 * ,了解JVM加载原理的都清楚,正真意义上的单例是饿汉式,在对象创建之前加载. * @author lx * */ public class Singleton { //饿汉式 public static Singleton singleton=null; static { singleton

单例模式的实现(饿汉式和懒汉式)

1.懒汉模式. class Singleton { private: static Singleton* m_instance; Singleton(){} public: static Singleton* getInstance(); }; Singleton* Singleton::getInstance() { if(NULL == m_instance) { Lock();//借用其它类来实现,如boost if(NULL == m_instance) { m_instance = n

Java---15---单例设计模式:---饿汉式和懒汉式

概念: 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.   单例模式有以下特点: 1.单例类只能有一个实例 2.单例类必须自己给自己创建自己的唯一实例 3.单例类必须给所有其他对象提供这一实例 饿汉式: /*饿汉式*/ class Single { private static final Single s = new Single(); private Single () {} public static Single getInstance() { return s

java GOF23设计模式-饿汉式和懒汉式

单例模式:保证一个类只用一个相同的实例,并且提供一个访问该实例的全局访问方法如任务管理器.回收站饿汉式:把构造器私有,则别人无法访问同时提供一个私有的创建好的static的该实例属性提供一个开放的方法返回该实例 public class Design { private static Design d =new Design(); //类初始化时,立即加载这个对象,没有延迟加载的优势 //即不使用对象会造成资源浪费 private Design() { } public static Desig

java===单类设计模式之饿汉式与懒汉式

package cn.china; public class Single { public static void main(String[]args){ // S singles=S.getInstance(); // S singless=S.getInstance(); // System.out.println(singles==singless); Test tt=Test.getInstance(); Test ttt=Test.getInstance(); tt.setNum(1

单例设计模式之饿汉式与懒汉式

/* 设计模式:对问题行之有效的解决方式.其实它是一种思想. 1,单例设计模式. 解决的问题:就是可以保证一个类在内存中的对象唯一性. 必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性. 如何保证对象唯一性呢? 1,不允许其他程序用new创建该类对象. 2,在该类创建一个本类实例. 3,对外提供一个方法让其他程序可以获取该对象. 步骤: 1,私有化该类构造函数. 2,通过new在本类中创建一个本类对象. 3,定义一个公有的方法,将创建的对象返回. */ //饿汉式 class