什么是单例模式(singleton)

一、什么是单例模式?

     在我们的Java应用程序中,随着应用程序的运行会创建出很多对象。但有时候我们希望在创建某类对象时,无论创建多少次该类对象只有一份在内存中。这就是单例模式。如果我们要实现单例模式首先要保证构造函数私有化,即不允许用户随意调用我本类的构造函数,因为只要通过new操作创建对象,必定要在堆中开辟空间,这样就无法实现单例了。

二、单例模式的实现
为了大家能很简单的理解单例模式,我们来实现一个案例:

案例描述:

      街头 银行取款机一次只可以一个人,用一张卡站它前面提款.

取款机的类,里面包含插入银行卡和取出银行卡两个方法。
package com.singleton;

/**银行提款机ATM*/
public class ATMCash {
       private static ATMCash instance;
       private String creditCard ;
      
       private ATMCash(){
            
      }
      
       //保证只有一个人一张卡在使用提款机
       public static synchronized ATMCash getInstance(){
             if(instance ==null){
                   instance = new ATMCash();
            }
             return instance ;
      }
      
       public String getCard(){
             return creditCard ;
      }
      
       //插入ATM磁卡
       public void insertCard(String card){
             creditCard = card;
      }
      
       //取出ATM磁卡
       public void getOutCard(){
             creditCard = null ;
      }
}

取款操作类,这个类是测试类
package com.singleton;

/**取款操作*/
public class SingletonTest {
       public static void main(String args[]){
             /**Jack取款*/
            ATMCash jack = ATMCash. getInstance();
            jack.insertCard( "招商银行信用卡" );
            System. out.println("Jack取钱用的银行卡是:" +jack.getCard());
            
             /**Rose取款*/
            ATMCash rose = ATMCash. getInstance();
            rose.insertCard( "中国人民银行信用卡" );
            System. out.println("Rose取钱用的银行卡是:" + rose.getCard());
      }
}

运行结果:
Jack的银行卡:招商银行信用卡
Rose的银行卡:中国人民银行信用卡

以下是单例模式的一般模型:
public class Singleton {
       private static Singleton single = null;
       private Singleton(){}
      
       public static Singleton getSingleton(){
             if(single ==null){
                   single = new Singleton();
            }
            
             return single ;
      }
}



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值