目录
单例模式
单例模式是比较常见的一种设计模式,目的是保证一个类只能有一个实例,而且自行实例化并向整个系统提供这个实例,避免频繁创建对象,节约内存。
package com.atguigu.practices.reflection;
public class SingleClass {
public static void main(String[] args) {
// 外部不能创建对象,否则编译报错
// SingleFactory singleFactory = new SingleFactory();
}
}
class SingleFactory{
// 将属性和方法用static修饰,这样是为了能够用类名来调用类中的属性和方法
private static SingleFactory singleFactory = null;
// 单例模式下,构造方法要私有化,表示只能被SingleFactory这个类的内部使用,防止外部创建对象
private SingleFactory(){
}
}
单例模式有两种创建方式:一种是懒汉模式,一种是饿汉模式(又名饥汉模式)。
(一)懒汉模式:
懒汉模式就是在类加载时不初始化,当系统第一次调用对象方法时才创建对象。
package com.atguigu.practices.reflection;
public class SingleClass {
public static void main(String[] args) {
// 外部不能创建对象,否则编译报错
// 构造方法私有化之后就不能通过
// SingleFactory singleFactory = new SingleFactory();
// 的方法来实例化对象了。
// SingleFactory singleFactory = new SingleFactory();
SingleFactory instance = SingleFactory.getInstance();
SingleFactory instance2 = SingleFactory.getInstance();
if(instance == instance2){
System.out.println("是同一个对象");// 是同一个对象
}
}
}
class SingleFactory{
// 将属性和方法用static修饰,这样是为了能够用类名来调用类中的属性和方法
private static SingleFactory singleFactory = null;
// 单例模式下,构造方法要私有化,表示只能被SingleFactory这个类的内部使用,防止外部创建对象
private SingleFactory(){
}
public static SingleFactory getInstance(){
if(singleFactory == null){
singleFactory = new SingleFactory();
}
return singleFactory;
}
}
(二)饿汉模式:
饿汉模式就是提前创建好对象,可以直接使用,但是占用内存资源。
package com.atguigu.practices.reflection;
public class SingleClass {
public static void main(String[] args) {
// 外部不能创建对象,否则编译报错
// 构造方法私有化之后就不能通过
// SingleFactory singleFactory = new SingleFactory();
// 的方法来实例化对象了。
// SingleFactory singleFactory = new SingleFactory();
SingleFactory instance = SingleFactory.getInstance();
SingleFactory instance2 = SingleFactory.getInstance();
if(instance == instance2){
System.out.println("是同一个对象");// 是同一个对象
}
}
}
class SingleFactory{
// 将属性和方法用static修饰,这样是为了能够用类名来调用类中的属性和方法
private static SingleFactory singleFactory = new SingleFactory();
// 单例模式下,构造方法要私有化,表示只能被SingleFactory这个类的内部使用,防止外部创建对象
private SingleFactory(){
}
public static SingleFactory getInstance(){
/*if(singleFactory == null){
singleFactory = new SingleFactory();
}*/
return singleFactory;
}
}
总结:
单例模式因为只有一个实例,可以节省内存资源。
单例模式的程序编写有懒汉模式和饿汉模式两种:
(1)懒汉模式是使用的时候才创建对象。
(2)饿汉模式是提前创建好对象,可以直接使用。
(3)懒汉模式和饿汉模式没有好坏之分,使用哪种要根据具体的需求来。