单例(Singleton)设计模式
1.概念
- 某个类只能存在一个对象实例,并且该类只提供一个取得该对象实例的方法
2.实现方式
-
懒汉式
// 这种写法线程不安全 package com.lmwei.p20; import com.sun.org.apache.xpath.internal.operations.Or; public class SingletonTest { public static void main(String[] args) { Order o1 = Order.getInstance(); Order o2 = Order.getInstance(); System.out.println(o1 == o2); } } class Order { // 1. 私有的构造器 private Order() { } // 2.声明当前对象,没有初始化 对象声明也必须是static private static Order instance = null; // 3. 声明public 返回当前对象 public static Order getInstance() { if(instance == null){ instance = new Order(); return instance; } return instance; } }
-
饿汉式
package com.lmwei.p20; public class Singleton { public static void main(String[] args) { Bank bank1 = Bank.getInstance(); Bank bank2 = Bank.getInstance(); //此时生成的两个对象是同一个对象 System.out.println(bank1 == bank2); } } class Bank { // 1.私有化类的构成器,避免在类的外部去生成对象 private Bank() { } // 2.内部创建类的对象 要求此对象也必须是静态的 private static Bank instance = new Bank(); // 3. 提供公共的方法返回对象 public static Bank getInstance() { return instance; } }
-
懒汉式和饿汉式的区别
- 懒汉式
- 好处:
延迟对象的创建
- 坏处:
线程不安全
- 好处:
- 饿汉式(提前创建好对象)
- 好处:
天然就是线程安全的
- 坏处:
对象加载时间过长
- 好处:
- 懒汉式
3.单例模式的使用场景
- 网站计数器
- 应用程序的日志应用
- 数据库连接池
- 读取配置文件的类
- Application
- Windows的任务管理器
- Windows的回收站