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