1、单例设计模式介绍:
即:保证一个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法
2、单例模式有两种方式:1) 饿汉式 2)懒汉式
3、区别:
1) 创建时机: 饿汉式在类加载时就创建了对象实例,懒汉式是在使用时创建;
2) 饿汉式不存在线程安全问题,懒汉式存在线程安全问题
3) 饿汉式不存在浪费资源的可能,懒汉式则不存在
1、饿汉式
/*
单例模式饿汉式:只要类加载,就会被创建,无论对象是否使用
1) 构造器私有化
2) 在类的内部创建对象
3) 提供公共的静态方法,返回对象
*/
public class singleInstance {
public static void main(String[] args) {
// Test test = new Test("132");
Test myTest = Test.getInstance(); //
Test myTest1 = Test.getInstance(); //
myTest.getName();
myTest1.getName();
System.out.println("--------------------------");
}
}
class Test{
private String name;
// 静态类属性,只在类加载时初始化一次,后续调用不再初始化
// 修饰符为private,类外无法调用
private static Test myTest = new Test("test");
// 构造器私有化,防止直接new对象
private Test(String name){
this.name = name;
}
// 对外提供公共的方法,返回对象,且对象始终都是相同的
// 静态方法,可以通过类名直接调用,
public static Test getInstance(){
return myTest;
}
public void getName(){
System.out.println(this.name);
}
}
2、懒汉式
/*
单例模式懒汉式:只有使用到对象时才创建
1、构造器私有化
2、定义一个私有的静态类属性,只定义,不进行赋值
3、提供public的方法,方法内部new一个对象并赋值
*/
class SingleInstance01{
public static void main(String[] args) {
Cat myCat = Cat.getInstance();
Cat myCat1 = Cat.getInstance();
System.out.println(myCat1 == myCat);
}
}
class Cat {
private String name;
private static Cat cat;
private Cat(String name){
this.name = name;
}
public static Cat getInstance(){
if(cat==null){
cat = new Cat("小猫");
}
return cat;
}
}