什么是单例设计模式?
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
为了保证对象在内存中的唯一性,即只能建立一个对象,因此使用单例设计模式。简单来说就是要求不能创建多个对象。我的理解是在特定的需求下,这种情况较为多见,其他的解决方式显得非常的复杂,单例设计模式是最简单最高效的解决方式。
方法分为3个主要的步骤:
1.将构造函数私有化
2.在类中创建一个本类对象
3.提供一个方法可以获取对象
有两种方式实现单例设计模式:
举一个简单的代码例子:
方法1:这种方法被称作:饿汉式
<span style="font-size:18px;">class main{}{
Student s1 = Student.getStudent();
//不能再使用 new 了,因为构造函数私有化了,new 会报错
}
class Student(){
private int age;
private static Student s = new Student();
private Student(){}
public static Student getStudent(){
return s;
}
public void setAge(int age){
this.age =age ;
}
public int getAge(){
return age;
}
}</span>
注意:
调用函数有两种方法。一个是new一个对象,进行实例化,对象点上方法完成调用
另一个是直接用类名点上函数进行调用,这种方法必须要求函数是static的,同时该函数中使用的变量也必须都是static的
方法2:对象的延迟加载,这种方法被称作:懒汉式
<span style="font-size:18px;">class main{}{
Student s1 = Student.getStudent();
//不能再使用 new 了,因为构造函数私有化了,new 会报错
}
class Student(){
private int age;
private static Student s = null;
private Student(){}
public static Student getStudent(){
if(s == null)
s = new Student();
return s;
}
public void setAge(int age){
this.age =age ;
}
public int getAge(){
return age;
}
}</span>
这两种方法各有特点,说不上好与坏,懒汉式是用时间换空间,饿汉式是空间换时间
通过代码明显可以看出饿汉式是一开始就创建好了对象,直接进行返回即可,但是饿汉式是调用的时候才进行创建,这是二者的主要区别。