【设计模式】常见单例模式与工厂模式归纳总结

一、概述

本文主要介绍常见的单例模式和工厂模式,主要参考网址:https://github.com/CyC2018/Interview-Notebook/blob/master/notes/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F.md 

与程杰电子书《大话设计模式》进行归纳总结。

其中页码为程杰电子书《大话设计模式》中对应的页码,粘贴的图片为加深理解提供帮助。

设计模式不是代码,而是解决问题的方案,学习现有的设计模式可以做到经验复用。

二、单例模式(P239

意图

确保一个类只有一个实例,并提供了一个全局访问点。

类图

使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。

私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。

 

实现

懒汉式-线程不安全

以下实现中,私有静态变量 uniqueInstance 被延迟化实例化,这样做的好处是,如果没有用到该类,那么就不会实例化 uniqueInstance,从而节约资源。

这个实现在多线程环境下是不安全的,如果多个线程能够同时进入if(uniqueInstance == null) ,那么就会多次实例化 uniqueInstance

publicclassSingleton {

    privatestatic Singleton uniqueInstance;

    privateSingleton() {

    }

    publicstatic Singleton getUniqueInstance() {

       if (uniqueInstance ==null) {

           uniqueInstance =new Singleton();

       }

       return uniqueInstance;

    }

}

懒汉式-线程安全

只需要 getUniqueInstance()方法加锁,那么在一个时间点只能有一个线程能够进入该方法,从而避免了对 uniqueInstance 进行多次实例化的问题。

但是这样有一个问题,就是当一个线程进入该方法之后,其它线程试图进入该方法都必须等待,因此性能上有一定的损耗。

publicstaticsynchronized Singleton getUniqueInstance() {

    if (uniqueInstance ==null) {

       uniqueInstance =new Singleton();

    }

    retu

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值