单例设计模式
什么是设计模式
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
什么是单例设计模式
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供了一个全局访问点来访问该实例。
饿汉式
1.现将构造器私有化
2.在类中声明一个静态变量
3.再写一个公共静态方法来返回(暴露)唯一的类
package com.LJX.Static_;
public class single {
public static void main(String[] args) {
// girlFriend girlFriend = new girlFriend();报错
girlFriend instance = girlFriend.getInstance();
System.out.println(instance);
}
}
//有一个类,girlfriend
//只能有一个
class girlFriend{
private String name;
//如何保证只有一个
//1.现将构造器私有化
//2.在类中声明一个静态变量
//3.再写一个公共静态方法来返回(暴露)唯一的类
static girlFriend girlfriend = new girlFriend("优雅");
private girlFriend(String name) {
this.name = name;
}
public static girlFriend getInstance(){
return girlFriend.girlfriend;
}
@Override
public String toString() {
return "girlFriend{" +
"name='" + name + '\'' +
'}';
}
}
懒汉式
package com.LJX.Static_;
public class single02 {
public static void main(String[] args) {
Cat p1 = Cat.getInstance();
Cat p2 = Cat.getInstance();
System.out.println(p1);
System.out.println(p2);
}
}
/*
*希望在程序运行过程中只有一个单例
* 使用单例模式-懒汉式
* */
class Cat{
private String name;
//1.构造器私有化
//2.定义一个本类的静态属性
//3.提供一个公共的静态方法,返回cat对象
private static Cat cat;
private Cat(String name) {
this.name = name;
}
//只有当用户第一次使用getinstance时才能声明变量,之后便直接return上一次创建的实例
//保证了对象的单例
public static Cat getInstance(){
if(cat == null){
Cat.cat = new Cat("结衣");
}
return cat;
}
@Override
public String toString() {
return "Cat{" +
"name='" + name + '\'' +
'}';
}
}
饿汉式VS懒汉式
1.创建的时机不同
2.饿汉式不存在线程安全问题,but存在资源的浪费