设计模式--单例模式

  1. 在某些情况下只需要某个对象只能有一个实例,就需要用到单例模式。

  2. 单例模式的特点

    1. 只有一个实例
    2. 必须要自行实例化
    3. 必须自行向整个系统停工访问点
  3. 饿汉式单例模式的代码实现

    /**
     * 懒汉式单例模式
     */
    public class LazySongleton {
    
        private static LazySongleton lazySongletonInstance;
    
        private LazySongleton() {
    
        }
    
        public LazySongleton getInstance(){
            if(null == lazySongletonInstance){
                lazySongletonInstance = new LazySongleton();
            }
            return lazySongletonInstance;
        }
    }
    
  4. 饿汉式单例模式代码实现

    /**
     * 饿汉式单例模式
     */
    public class HungrySingleton {
    
        private static final HungrySingleton hungrySingletonInstance = new HungrySingleton();  //在类加载的过程就会初始化静态变量
    
        public HungrySingleton() {
        }
    
        public HungrySingleton getInstance(){
            return hungrySingletonInstance;
        }
    }
    
  5. 上面的两种实现方式在多线程环境下有可能会出现创建多个实例的问题,就违背了单例设计模式。

  6. 解决的方案如下:

    1. 使用sinchronized来处理,也就是将getInstance()方法变成同步方法。
    2. 直接初始化静态变量,保证线程安全。
  7. 线程安全的单例设计模式

    /**
     * 线程安全的单例模式
     */
    public class SynSingleton {
    
        private static SynSingleton synSingleton;
    
        private SynSingleton() {
        }
    
        public synchronized static SynSingleton getInstance(){
            if(null == synSingleton){
                synSingleton = new SynSingleton();
            }
            return synSingleton;
        }
    }
    
  8. 单例模式的优点

    1. 节约了系统资源,由于系统中只存在一个实例对象,对于一些需要频繁创建和销毁的系统而言,单例模式节约了系统资源提高了系统的性能。
    2. 因为单例模式封装了它的唯一实例,所以它可以严格控制客户的访问方式。
  9. 单例模式的缺点

    1. 单例模式中没有抽象层,因此单例类的扩展很困难;
    2. 单例类的职责过重,在一定程度上违背了"单一职责"原则。
  10. 单例模式的使用场景:

    1. 系统只需要一个实例对象,或者需要考虑消耗资源太大而允许创建一个对象;
    2. 客户调用类的单个实例只允许有一个公共访问点,不能通过其他途径访问该实例。
  11. JDK中单例模式的使用

    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值