单例设计模式(懒汉式,饿汉式)

设计模式:解决问题的一种行之有效的思想

单例设计模式:保证了一个类在内存中只能有一个对象,比如多程序访问一个配置文件,希望多程序操作都是同一个配置文件中的数据,那么就需要保证该配置文件对象的唯一性。

思路:1.怎么做才能保证这个对象是唯一的呢?其他程序通过new创建该类对象时根本无法控制个数,那么,就不让其他程序创建该类的对象了,因为不可以控制。2、不让其他程序创建,就该在本类中自己创建一个对象。3、该类将创建的对象对外提供,让其他程序获取并使用。

步骤:1、怎么实现不让其他程序创建该类对象呢?将该类中的构造函数私有化。

比如:class Single

{

   private Single();

}

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

比如   class Single

{

   private Single(){};

         private  Single s = new Single();

}

3、定义一个方法,返回值是本类类型。让其他程序通过该方法就可以获得该类对象。但是这个方法一定是public的

比如:

class Single

{

 private Single(){};

 private static  Single s = new Single();

 public  static    Single getInstance()

       {

           return s;

       }

}

}

示例:

package com_package2;

public class Single {
    private Single(){};
    private static Single s= new Single();
    public static Single Instance()
    {
        return s;

    }

}
package com_package2;

public class SingleDemo {

    /**
     * @param args
     */
    public static void main(String[] args) {

        Single s1 = Single.Instance();

        // TODO Auto-generated method stub

    }

}

package com_package2;

public class Single {
    private Single(){};
    private static Single s = new Single();
    public static  Single Instance()
    {
        return s;

    }

}//饿汉式
package com_package2;

public class Single2 {
    private Single2(){};
    private static Single2 s2 = null;
    public static Single2 Instance()
    {
         if(s2==null)
             s2=new Single2();
          return s2;

    }

}//懒汉式,也叫做单例的延迟加载方式

开发的时候一般用第一种模式,饿汉式,因为在涉及到多线程的问题式,懒汉式会导致一系列的安全隐患,但是懒汉式是单例模式中的重要考察点

package com_package2;

public class ArrayTool {    private ArrayTool(){};//这句话就不让其他的程序再创建新的对象了。
    public static int  Max(int []arr)
    {
        int max=0;
        for(int i=1;i<arr.length;i++)
        {
            if(arr[i]>arr[max])
            {
                max=i;

            }
            else continue;
        }
        return arr[max];

    }
public static int Min(int []arr)
{
    int min=0;
    for(int i=0;i<arr.length;i++)
    {
        if(arr[i]<arr[min])
        {
            min=i;

        }
        else
            continue;

    }
    return arr[min];
}
}
package com_package2;

public class ArraysDemo {

    /**
     * @param args
     */
    public static void main(String[] args) {

        int[] a={1,7,4,5,3,3,6};
        int maxs =ArrayTool.Max(a);
        int mins = ArrayTool.Min(a);
        System.out.println("maxs="+" "+maxs);
        System.out.println("mins="+" "+mins);
        // TODO Auto-generated method stub

    }

}

maxs= 7
mins= 1

 

在上面的类中,由于两个方法都没有访问到特有变量,所有都可以加static所以在带有主函数的类中引用这些方法的时候就可以用类名直接调用。

时间: 2024-12-13 18:37:02

单例设计模式(懒汉式,饿汉式)的相关文章

单例设计模式---懒汉式+饿汉式

package com.Thread; /** * 单例设计模式:确保一个类只有一个对象 */ public class Synchronized_Singleton { public static void main(String[] args) { JvmThread jvm1= new JvmThread(100); JvmThread jvm2= new JvmThread(100); jvm1.start(); jvm2.start(); } } /** * 懒汉式(饿汉式:在声明静态

Spring -11 -单例设计模式 -懒汉式/饿汉式(idea默认的)

单例设计模式 作用: 在应用程序有保证最多只能有一个实例. 好处: 2.1 提升运行效率. 2.2 实现数据共享. 案例:application 对象 懒汉式 3.1 对象只有被调用时才去创建. 3.2  示例代码 3.3由于添加了锁,所以导致效率低. public class lazySingleton { //懒汉式,单例模式! //由于对象需要被静态方法调用,把方法设置为static //由于对象是static,必须要设置访问权限修饰符为private , //如果是public 可以直接

单例设计模式之饿汉式(静态常量)

package com.waibizi; /** * 单例设计模式之饿汉式(静态常量) * 步骤 * 1.构造器私有化(防止new) * 2.类的内部创建对象 * 3.向外暴露一个静态的公共方法 getInstance * 4.代码实现 * @author 歪鼻子 * * *优点:这种写法比较简单,类加载的时候就完成了实例化.避免了线程同步问题 *缺点:类装载的时候就完成了实例化,如果从开始到至终都没使用过这个类,势必会造成资源的浪费 *结论:这种单例模式是可用的,可能会导致浪费(调用getIn

单例设计模式之饿汉式(静态代码块)

package com.waibizi.demo02; /** * 单例设计模式之饿汉式(静态代码块) * 这种方式与饿汉式静态常量的方式是类似的,类装载的时候也有直接创建对象 * @author 歪鼻子 * */ @SuppressWarnings("all") public class Singleton_Pattern { public static void main(String[] args) { // TODO Auto-generated method stub } }

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

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

单例设计模式懒汉式和恶汉式

一,单例设计模式懒汉式和恶汉式 懒汉式在类加载时不初始化,延迟加载.(配置文件) 饿汉式在类加载时初始化,加载慢,获取对象快. 饿汉式是线程安全的, 懒汉式需要加synchronized,否则不安全. 二,饿汉式 1 public class Singletonehan { 2 private static Singletonehan singleton=new Singletonehan(); 3 private Singletonehan() { 4 } 5 public static Si

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

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

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

设计模式中饿汉式单例类和懒汉式单例类

单例模式的特点为: *单例类只有一个实例. *单例类必须自己创建自己的唯一实例. *单例类必须给所有其他对象提供这一实例. 饿汉式单例类: 而饿汉式单例类则在java语言中是最为简单的单例类,这是一个描述饿汉式单例类的类图的实现. 此类图中,此类已经将自己实例化. 源码为: package singleton; public class EagerSingleton { private static EagerSingleton instance=new EagerSingleton(); /*

单例设计模式懒汉式的缺陷

http://icyfenix.iteye.com/blog/575052 IcyFenix 探索设计模式之六——单例模式 设计模式Spring应用服务器多线程JVM 6.单例模式(Singleton Pattern) 前面说提到的五种创建模式,主要解决的问题是如何创建对象,获得产品.而单例模式最要关心的则是对象创建的次数以及何时被创建. Singleton模式可以是很简单的,它的全部只需要一个类就可以完成(看看这章可怜的UML图).但是如果在“对象创建的次数以及何时被创建”这两点上较真起来,S