单例设计模式
1.单例设计模式,就是在整个软件系统中,对某个类只能存在一个对象实例;
2.如何实现
(饿汉式):在类里直接创建好对象,用的时候直接调用,线程安全的。
1)私有化类的构造器(不能在外面创建类的对象)
2)内部创造静态对象
3)提供公共静态方法,返回类的对象(可以直接用类名调用)
创建代码
//饿汉式
class BankText{
private BankText() {//私有化类的构造器
}
private static BankText instance=new BankText();//内部创造静态对象
//提供公共静态方法,返回类的对象(可以直接用类名调用)
public static BankText getinstance(){
return instance;
}
}
测试代码
public class SingletonText {
public static void main(String[] args) {
BankText bankText1=BankText.getinstance();
BankText bankText2=BankText.getinstance();
System.out.println(bankText1==bankText2);//如果两个对象地址相同,即返回true,则两个对象为同一对象
}
}
测试结果
(懒汉式):在第一次调用的时候才创建对象,线程不安全,需要改进。
1)私有化类的构造器
2)声明当前类对象,不初始化(对象在方法内初始化)
3)提供公共静态方法,返回类的对象(可以直接用类名调用)
创建代码
//懒汉式
class BankText1{
private BankText1() {//私有化类的构造器
}
private static BankText1 instance=null;//声明类的对象,不初始化
//提供公共静态方法,返回类的对象(可以直接用类名调用)
public static BankText1 getinstance(){
if(instance==null) {//判断是否存在对象,如果不存在则创建一个,存在则直接返回对象;
instance = new BankText1();
}
return instance;
}
}
测试代码
public class SingletonText {
public static void main(String[] args) {
BankText1 bankText1=BankText1.getinstance();
BankText1 bankText2=BankText1.getinstance();
System.out.println(bankText1==bankText2);//如果两个对象地址相同,即返回true,则两个对象为同一对象
}
}
测试结果