单列设计模式: 所谓的单列设计模式,就是采取一定的方法,保证整数软件系统中,只能存在一个对象实例。
特点:
1. 单例类只能有一个实例
2.单例列必须自己创建自己的唯一实例
3.单例类必须给所有其他对象提供这一实例

饿汉式单例模式
-
- // 如何实现?:
-
- public static void main(String[] args) {
-
- // 返回的就是bank1 对象 (返回两个唯一的对象)
- Bank bank1 = Bank.getInstance();
- Bank bank2 = Bank.getInstance();
- System.out.println(bank1 == bank2); // 返回true(地址值是一样的);
-
-
- // Bank instance = Bank.getInstance();
-
-
- }
-
-
- }
-
-
- // 银行类: 单例 (饿汉式单例模式)
- class Bank {
-
-
- // 1. 私有化类 的构造器,为了避免,除Bank类的外面调用构造器,(即实例化对象)
- private Bank(){
-
- }
-
-
- // 2.内部 创建类的对象 (外面除了,Bank类以外实例化不了对象,只能在内部)
- // 要求此对象,也必须声明为静态的
-
- private static Bank instance = new Bank(); // (静态的)
-
-
- // 3,提供公共的静态方法,返回类的对象,静态的方法中只能调用静态的结构
-
-
- // 如果这里不是静态方法,是一般方法,外部类中的得创建Bank类的实例化对象,这样就可以调用getInstance方法,返回一个对象
- public static Bank getInstance(){ //(静态的)
- return instance;
- }
-
-
- }
懒汉式单例模式:
- public class SingletonTest2 {
-
- public static void main(String[] args) {
- //类名(要实例化的是哪个对象) 变量名(用来接收实例化对象)
- Order order1 = Order.getInstance();
- Order order2 = Order.getInstance();
-
- System.out.println(order1 == order2);// true
-
- }
-
- }
-
-
- class Order {
-
- //1.私有化类的构造器
-
- private Order(){
-
- }
-
- // 2. 先声明当前类的对象,没有初始化
- // 4. 此对象也必须声明为static的
- private static Order instance = null;
-
-
- // 3. 声明public、static的返回当前类对象的方法
- public static Order getInstance(){
-
- // 错误写法:
- // instance = new Order();
- // return instance;
-
- // 不加if 判断,每调用一下getInstance,就创建一个新的Order实例化对象
- if(instance == null){ // 如果没有实例化对象,就创建
- instance = new Order();
- }
- return instance;
- }
-
- }
【区分】
饿汉式:
坏处: 对象加载时间过长
好处: 线程安全的(不会存在多个线程抢一个资源之类的)
懒汉式: 好处: 延迟对象创建
坏处: 不安全
例子: 两个线程都去获取这个对象,首次调用为null(判断),线程就假设阻塞了一下 ,就在这个阻塞的时间之内,另外一个线程也去获取这个对象,此时判断还是null,等阻塞没有了,他们两个对象 就进入if里面的new,各自实例化了一个实例对象,这样不安全,比如出现多个人抢到了一张火车票。
【应用场景】
网页的计数器,应用程序的日志应用,数据库的连接池,项目中读取配置文件的类,
任务管理器,回收站也是。