单例设计模式属于静态方法和属性的经典应用。
什么是单例设计模式?
1:就是采取一定的方法保证整个的软件系统中,对某个类只能存在一个实例对象,并且该类只提供一个取得其对象的实例方法。
2:当我们需要反复的创建对象实例,并且对象实例的作用都一样时,就可以使用单例模式进行设计。
单例设计之饿汉式
步骤:
1:构造器私有化。
2:类的内部创建对象。
3:向外暴露一个静态的公共方法。
//单例设计模式 饿汉式
public class SingleDesign {
private String name;
//类的内部实例化对象
private final static SingleDesign singleDesign=new SingleDesign("单例设计模式饿汉式");
//私有化构造器方式外界实例化
private SingleDesign(String name) {
this.name = name;
}
public String getName() {
return name;
}
//私有化set方法防止外界赋值
private void setName(String name) {
this.name = name;
}
//通过公共方法来返回创建的对象
public static SingleDesign getSingleDesign(){
return singleDesign;
}
@Override
public String toString() {
return "SingleDesign{" +
"name='" + name + '\'' +
'}';
}
public static void main(String[] args) {
System.out.println(getSingleDesign());
}
}
注意:饿汉式的缺点是可能造成已经创建了对象,但是并为使用,造成了内存的浪费。
单例设计之懒汉式
1:构造器私有化。
2:定义一个static静态属性的对象。
3:提供一个公共的静态方法,返回一个对象。
与饿汉式不同的是需要进行对象是否创建的判断就可以很好地解决了饿汉式的创建对象之后并未使用。
//单例设计模式懒汉式
public class SingleDesign02 {
private String name;
//定义一个静态的属性对象
private static SingleDesign02 singleDesign02;
private SingleDesign02(String name) {
this.name = name;
}
public String getName() {
return name;
}
//私有化set方法
private void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "SingleDesign02{" +
"name='" + name + '\'' +
'}';
}
public static SingleDesign02 singleDesign02(){
if (singleDesign02==null){
singleDesign02=new SingleDesign02("单例设计模式懒汉式");
}
return singleDesign02;
}
public static void main(String[] args) {
System.out.println(singleDesign02().toString());
}
}
注意:懒汉式存在线程安全问题
两种方式的不同点:饿汉式是在类加载时就创建了对象实例,懒汉式只有在使用时才会创建对象实例。