## **一、單例模式**
特點:
* 單例類只能有一個實例
* 單例類必須自己創建自己的唯一實例
* 單例類必須給所有其他對象提供一個全局的實例
## 單例模式之懶漢模式
```
/**
* 文件描述:
* 創建用戶: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標簽