关于单例(饿汉式与懒汉式)

饿汉式单例:

 1 package com.mon11.day27.single;
 2 /**
 3 * 类说明 :
 4 * @author 作者 :chenyanlong
 5 * @version 创建时间:2017年11月27日
 6 */
 7 public class SingleTon {
 8     // 饿汉式 线程全
 9     private static SingleTon singleTon=new SingleTon();
10     /*1.构造方法私有化*/
11     private SingleTon(){
12
13     }
14    /*    返回对象singleTon*/
15     public static SingleTon getSingleTon() {
16         return singleTon;
17     }
18
19
20 }

懒汉式单例:

 1 package com.mon11.day27.single;
 2 /**
 3 * 类说明 :
 4 * @author 作者 :chenyanlong
 5 * @version 创建时间:2017年11月27日
 6 */
 7 public class SingleTonA {
 8     // 饿汉式 线程全
 9     private static SingleTonA singleTon=null;
10     /*1.构造方法私有化*/
11     private SingleTonA(){
12
13     }
14
15    /*    返回对象singleTon*/
16     public static synchronized SingleTonA getSingleTon() {
17         if(singleTon==null){
18             //SingleTonA singleTon=new SingleTonA();//测试为空
19             singleTon=new SingleTonA();//测试ok
20         }
21         return singleTon;
22     }
23
24
25 }

测试代码:

 1 package com.mon11.day27.single;
 2
 3 import static org.junit.Assert.*;
 4
 5 import org.junit.Test;
 6
 7 /**
 8 * 类说明 :
 9 * @author 作者 :chenyanlong
10 * @version 创建时间:2017年11月27日
11 */
12 public class TestDemo {
13
14     //饿
15     @Test
16     public void test() {
17         SingleTon  singleTon=SingleTon.getSingleTon();
18         SingleTon  singleTon1=SingleTon.getSingleTon();
19         SingleTon  singleTon2=SingleTon.getSingleTon();
20         System.out.println(singleTon);
21         System.out.println(singleTon1);
22         System.out.println(singleTon2);
23     }
24
25     @Test
26     public void test1() {
27         SingleTonA  singleTon=SingleTonA.getSingleTon();
28         SingleTonA  singleTon1=SingleTonA.getSingleTon();
29         SingleTonA  singleTon2=SingleTonA.getSingleTon();
30         System.out.println(singleTon);
31         System.out.println(singleTon1);
32         System.out.println(singleTon2);
33     }
34
35 }

运行效果1:

运行效果2:

时间: 2024-11-05 22:41:49

关于单例(饿汉式与懒汉式)的相关文章

单例饿汉式和饱汉式各自的有缺点(转)

单例模式应用于一个类只有一个实例的情况,并且为其实例提供一个全局的访问点. 特点: 1.一个类只有一个实例 2.自己创建这个实例 3.整个系统只能用这个实例 应用场景 外部资源:每台计算机有若干个打印机,但只能有一个PrinterSpooler,以避免两个打印作业同时输出到打印机. 内部资源:大多数软件都有一个(或多个)属性文件存放系统配置,这样的系统应该有一个对象管理这些属性文件. 实现方式 1.饿汉式:单例实例在类装载时就构建,急切初始化.(预先加载法) /** * 饿汉式(推荐) * */

C++两种单例(饿汉式,懒汉式)

俄汉式 #include <iostream> using namespace std; class A{ public:     static A& getInstance(void){         return s_instance;     } private:     A(int data=0):m_data(data){}     A(A const& that);     int m_data;     static A s_instance; }; A A::

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

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

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

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

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

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

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

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

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

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

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