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

---恢复内容开始---

设计模式:解决某一类问题最行之有效的方法 java中有23种设计模式 今天学习其中一种:单例设计模式:解决一个类在内存只存在一个对象

想要保证对象唯一。

1.为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象

2.还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象

3.为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式

这三部分用代码体现:

1.将构造函数私有化

2.在类中创建一个本类对象

3.提供一个方法可以获取到该对象

package com.dreamly.day02;

/**
 * @author dreamly
 *
 */
public class SingleDemo {

    /**
     * 原则:定义单例,建议使用饿汉式,懒汉式在并发时容易出现实例化混乱的问题,只有加锁和多线程双重判断才能解决问题,相比饿汉式,代码量长了判断多了而且费时费力
     *
     */
    public static void main(String[] args) {
        Single s1=Single.getInstance();
        Single s2=Single.getInstance();
        System.out.println(s1==s2);
    }
}
/*
 * 这个是先初始化对象
 * 称为:饿汉式
 * Single类一进入内存,就已经创建好了对象
/*
 class Single{
    private Single() {}
    private static Single s=new Single();
    public static Single getInstance() {
        return s;
    }
}
*/
/*
 * 对象是在方法被调用时,才初始化,又叫对象的延时加载
 * 称为:懒汉式
 * Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象
 */
class Single{
    private static Single s=null;
    private Single() {};
    public static Single getInstance() {
        if(s==null) {
            synchronized (Single.class) {
                if(s==null) {
                    s=new Single();
                }
            }
        }
        return s;
    }
}

---恢复内容结束---

时间: 2024-09-29 00:50:19

java学习之单例模式(饿汉式与懒汉式)的相关文章

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

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

单例模式 饿汉式 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.直接暴露2.静态变量的get方法获取) 几种常见形式 饿汉式:直接创建对象,不存在线程安全问题 直接实例化饿汉式简洁直观 枚举式 最简洁 静态代码块饿汉式 适合复杂实例化 饿汉式方式一: public class Singleton1 { public static final Singleton1 SINGLETON1 = new Sin

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.懒汉模式. 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

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

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