单例模式(饿汉式和懒汉式)----目的:保证这个类只创建一个对象

饿汉式和懒汉式区别:

饿汉式一开始就创建一个对象,勤快,但是如果用不到创建的对象,对象就是多余的

懒汉式不用就不创建对象,因为懒得吃屎*.*

package day12;

/*
* 单例模式(饿汉式):
* 1.构造方法私有化,使用private修饰构造方法
* 2.定义一个当前类型的静态变量,并创建对象
* 3.提供公共的获取当前类示例的静态方法
* 缺点:因为在类加载之后对象就创建好了,
* 倘若在别的地方没有用到这个对象的话,这个对象就是多余的
*/
public class Singleton01 {
// 定义一个当前类型的静态变量,并创建对象
private static Singleton01 instance = new Singleton01();

// 构造方法私有化,使用private修饰构造方法,保证当前类在外部无法直接常见该类的对象
private Singleton01() {
}

// 提供公共的获取当前示例的静态方法
public static Singleton01 getInstance() {
return instance;
}
}

---------------------懒汉式-------------------------------

如果懒汉式的条件变为实例化

 相当于创建了一个局部变量
没有给成员变量的instance赋值

f(instance==null){
Singleton02 instance=new Singleton02();
System.out.println("我走了");
}

*************************************

package day12;

/*单例模式:(懒汉式)
* 1.构造方法私有化
* 2.定义一个用来存放单例对象的静态变量
* 3.提供公共的获取当前类示例的静态方法
* 当前懒汉式的写法是有线程安全问题的
*/
public class Singleton02 {
// 定义一个用来存放单例对象的静态变量
private static Singleton02 instance;

// 构造方法私有化
private Singleton02() {
}

// 提供公共的获取当前类示例的静态方法
public static Singleton02 getInstance() {
// 判断当前静态变量是否为null
if (instance == null) {
instance = new Singleton02();
}
return instance;
}
}

----------------饿汉式和懒汉式测试结果-----------------------

package day12;

public class Test01 {
public static void main(String[] args) {
// ----------饿汉式------------
Singleton01 aSingleton01 = Singleton01.getInstance();
System.out.println(aSingleton01);
Singleton01 b = Singleton01.getInstance();
System.out.println(b);
Singleton01 cSingleton01 = Singleton01.getInstance();
System.out.println(cSingleton01);

// ---------懒汉式--------------
Singleton02 aSingleton02 = Singleton02.getInstance();
System.out.println(aSingleton02);
Singleton02 bSingleton02 = Singleton02.getInstance();
System.out.println(bSingleton02);
Singleton02 cSingleton02 = Singleton02.getInstance();
System.out.println(cSingleton02);

}

}

---------------饿汉式和懒汉式输出结果--------------------

day12.Singleton01@15db9742
day12.Singleton01@15db9742
day12.Singleton01@15db9742
day12.Singleton02@6d06d69c
day12.Singleton02@6d06d69c
day12.Singleton02@6d06d69c

-----------------------单列模式的案例:Runtime-------------------------------------

package day12;

import java.io.IOException;

/*
* 单列模式的案例:Runtime
*/
public class Test02 {
public static void main(String[] args) throws IOException {
Runtime runtime = Runtime.getRuntime();
// runtime.exec("mspaint");
// runtime.exec("notepad");
runtime.exec("calc");

}
}

原文地址:https://www.cnblogs.com/Koma-vv/p/9511862.html