设计模式概念学习

创建类型

单例模式

饿汉

构建时就创建

懒汉

  1. 单线程-访问到的时候才创建
  2. 多线程-低效率
    做法:加锁->若未创建则创建->获取资源->解锁
    缺点:效率低,每次访问之前都要加锁,资源创建之后不能被同时被多个线程访问
  3. 多线程-双重判断
    做法:判断资源未存在->加锁->二次判断资源未存在->创建资源->解锁->获取资源
    原因:先判断资源是否存在,只有第1次判断到资源不存在才需要加锁,当资源创建之后就不用再加锁了,多线程在大部分情况下可同时访问,提高资源访问效率;在加锁之后需要再次判断资源是否存在,可能在第1次判断和拿到锁的时间间隙中资源已经被其他线程访问和创建了,因此需要二次判断。

工厂模式

简单工厂

使用1个工厂类去创建产品类,可能需要很多个if else分支去创建不同的产品

缺点:违反开闭原则,则新增产品就需要修改工厂类

工厂方法

抽象工厂

相关推荐
long3169 分钟前
构建者设计模式 Builder
java·后端·学习·设计模式
吐个泡泡v12 分钟前
Maven 核心命令详解:compile、exec:java、package 与 IDE Reload 机制深度解析
java·ide·maven·mvn compile
点云SLAM13 分钟前
C++中内存池(Memory Pool)详解和完整示例
开发语言·c++·内存管理·内存池·new/delete·malloc/free
天上掉下来个程小白18 分钟前
微服务-01.导入黑马商城
java·微服务·架构
Noii.36 分钟前
Spring Boot初级概念及自动配置原理
java·spring boot·后端
探索java43 分钟前
Tomcat Server 组件原理
java·后端·tomcat
勿在浮沙筑高台43 分钟前
无法获取实体类com.example.springdemo2.entity.po.UserPO对应的表名!
java·spring boot·mybatis
程高兴1 小时前
遗传算法求解冷链路径优化问题matlab代码
开发语言·人工智能·matlab
wow_DG1 小时前
【C++✨】多种 C++ 解法固定宽度右对齐输出(每个数占 8 列)
开发语言·c++·算法
用户8356290780511 小时前
Java使用Spire.Doc实现Word转PDF:格式精准的自动化解决方案
java