## **一、单例模式**
特点:
* 单例类只能有一个实例
* 单例类必须自己创建自己的唯一实例
* 单例类必须给所有其他对象提供一个全局的实例
## 单例模式之懒汉模式
```
/**
* 文件描述:
* 创建用户:emotion
* 创建时间:2019/12/9
*/
public class SingletonPattern {
/**
* 内存可见性,所有线程都能看到共享内存的最新状态
*/
private static volatile SingletonPattern singletonPattern;
/**
* 保护行构造方法,不允许被实例化
*/
private SingletonPattern(){}
/**
* 获取唯一实例
* 双重检查锁定
*/
public static SingletonPattern getInstance(){
//先检查实例是否存在,如果不存在才进入下面的同步块
if(singletonPattern==null){
//同步块,线程安全的创建实例
synchronized (SingletonPattern.class){
//再次检查实例是否存在,如果不存在才真正的创建实例
if(singletonPattern==null){
singletonPattern = new SingletonPattern();
}
}
}
return singletonPattern;
}
}
```
## 单例模式之饿汉模式
```
/**
* 文件描述:
* 创建用户:emotion
* 创建时间:2019/12/9
*/
public class SingletonPattern {
//类加载的时候就创建实例
private static SingletonPattern singletonPattern = new SingletonPattern();
/**
* 保护行构造方法,不允许被实例化
*/
private SingletonPattern(){}
/**
* 获取唯一实例
*/
public static SingletonPattern getInstance(){
return singletonPattern;
}
}
```
## **工厂模式**
* 常用的工厂模式是静态工厂,利用static方法,
* 作为一种类似于常见的工具Utils等辅助效果
* 一般情况下工厂类不需要被实例化
```
interface food{}
class A implements food{}
class B implements food{}
class C implements food{}
public class FactoryPattern {
/**
* 保护型构造,不允许被实例化
*/
private FactoryPattern(){}
public static food getA(){ return new A(); }
public static food getB(){ return new B(); }
public static food getC(){ return new C(); }
}
class Client{
//客户端代码只需要将相应的参数传入即可得到对象
//用户不需要了解工厂类内部的逻辑。
public void get(String name){
food x = null ;
if ( name.equals("A")) {
x = FactoryPattern.getA();
}else if ( name.equals("B")){
x = FactoryPattern.getB();
}else {
x = FactoryPattern.getC();
}
}
}
```
## **抽象工厂模式**
- JDK常用知识库
- JDK各个版本安装
- Java8流
- 算法
- 十大排序算法
- 冒泡排序
- 选择排序
- 插入排序
- 归并排序
- 快速排序
- 堆排序
- 希尔排序
- 计数排序
- 桶排序
- 基数排序
- 总结
- 常用工具类
- 浮点型计算
- 时间格式处理
- 常用功能点思路整理
- 登录
- 高并发
- 线程安全的单例模式
- Tomcat优化
- Tomcat之APR模式
- Tomcat启动过慢问题
- 常用的数据库连接池
- Druid连接池
- 缓存
- Redis
- SpringBoot整合Redis
- 依赖和配置
- RedisTemplate工具类
- 工具类使用方法
- Redis知识库
- Redis安装
- Redis配置参数
- Redis常用Lua脚本
- MongoDB
- SpringBoot操作MongoDB
- 依赖和配置
- MongoDB工具类
- 工具类使用方法
- 消息中间件
- ActiveMq
- SpringBoot整合ActiveMq
- 框架
- SpringBoot
- 定时任务
- 启动加载
- 事务
- JSP
- 静态类注入
- SpringSecurity
- Shiro
- 配置及整合
- 登陆验证
- 权限验证
- 分布式应用
- SpringMVC
- ORM框架
- Mybatis
- 增
- 删
- 改
- 查
- 程序员小笑话
- 我给你讲一个TCP的笑话吧
- 二进制笑话
- JavaScript的那点东西
- JavaScript内置对象及常见API详细介绍
- JavaScript实现Ajax 资源请求
- JavaScript干货
- 架构师成长之路
- JDK源码解析
- ArrayList源码解读
- 设计模式
- 微服务架构设计模式
- 逃离单体炼狱
- 服务的拆分策略
- 全面解析SpringMvc框架
- 架构设计的六大原则
- 并发集合
- JUC并发编程
- 搜索引擎
- Solr
- Solr的安装
- 分布式服务框架
- Dubbo
- 从零开始学HTMl
- 第一章-初识HTML
- 第二章-认识HTML标签