暂时不考虑多线程的单例模式

本文详细介绍了单例模式的两种实现方式:饿汉式和懒汉式。饿汉式单例模式在类加载时就创建实例,确保了线程安全性;而懒汉式单例模式则在首次使用时创建实例,提高了资源利用率。

饿汉式单例模式:

复制代码
 1 package cn.itcast.singleton;
 2     /*
 3     最简单的设计模式就是单例模式 
 4     单个实例的模式,一个类只能生成一个对象,
 5     new或者其他方式最后只能生成一个对象,不能再生成新的对象.
 6     */
 7 public class SingletonTest {
 8     public static void main(String[] args) {
 9         Singleton singleton = Singleton.getInstance();
10         Singleton singleton2 = Singleton.getInstance();
11         //判断生成的对象是否是一个对象.
12         System.out.println(singleton==singleton2);
13     }
14 }
15 class Singleton{
16     //在Singleton类中声明一个对象.然后在类中向外提供一个得到这个对象的方法
17     //下面的getInstance()方法是static类型的.要调用的也必须是static类型的.
18     private static Singleton singleton = new Singleton();
19     
20     //单例类Singleton中的构造方法必须是private,不能让外部访问该构造方法.否则无法实现单例模式
21     private Singleton(){
22         
23     }
24     //这个getInstance()方法必须是static静态的方法,因为这个方法是一个实例方法.
25     //外部调用实例方法通过该类的对象来调用,但是外部因为该类的构造方法是private的无法得到该类对象
26     //所以要声明成static静态的方法,通过类名来调用这个实例方法.
27     public static Singleton getInstance(){
28         return singleton;
29     }
30 }
31     /*
32     这种方式(饿汉式)是你在你没有调用Singleton的时候也生成一个singleton对象了.
33     这种是一定是单例的,第二种(懒汉式)在多线程的情况下可能不是单例的.
34     */
复制代码

懒汉式单例模式

复制代码
 1 package cn.itcast.singleton2;
 2     /*
 3     最简单的设计模式就是单例模式 
 4     单个实例的模式,一个类只能生成一个对象,
 5     new或者其他方式最后只能生成一个对象,不能再生成新的对象.
 6     */
 7 public class SingletonTest {
 8     public static void main(String[] args) {
 9         Singleton singleton = Singleton.getInstance();
10         Singleton singleton2 = Singleton.getInstance();
11         //判断生成的对象是否是一个对象.
12         System.out.println(singleton==singleton2);
13     }
14 }
15 class Singleton{
16     //在Singleton类中声明一个对象.然后在类中向外提供一个得到这个对象的方法
17     //下面的getInstance()方法是static类型的.要调用的也必须是static类型的.
18     private static Singleton singleton;
19     //这个地方先不赋值,不赋值肯定不对,就要在你调用getInstance()方法的时候判断这个singleton对象是否为空.
20     
21     //单例类Singleton中的构造方法必须是private,不能让外部访问该构造方法.否则无法实现单例模式
22     private Singleton(){
23         
24     }
25     //这个getInstance()方法必须是static静态的方法,因为这个方法是一个实例方法.
26     //外部调用实例方法通过该类的对象来调用,但是外部因为该类的构造方法是private的无法得到该类对象
27     //所以要声明成static静态的方法,通过类名来调用这个实例方法.
28     public static Singleton getInstance(){
29         if(singleton == null){
30             singleton = new Singleton();
31         }
32         return singleton;
33     }
34 }
复制代码

 ============================华丽丽的分割线====================================


本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/4005065.html,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值