[TOC]
[PHP 設計模式全集](https://learnku.com/docs/php-design-patterns/2018)
## 單例模式 `instance`
* 有多種實現模式,如餓漢、懶漢、登記、注冊、雙重鎖等
> * 三私一公:
> * * 私有(`private`)的靜態屬性,存放實例化的類
> * * 私有(`private`)的構造方法(`__constroller`),禁止外部實例化
> * * 私有(`private`)的克隆方法(`__clone`),禁止外部克隆類
> * * 公共(`public`)的靜態方法,返回唯一實例的一個引用。
> * 餓漢模式:
> * * 在類加載的時候就實例化,并且創建單例對象。
> * * 在線程還沒出現之前就已經實例化了,因此餓漢式線程一定是安全的
> * * 占用內存空間,用空間換時間,執行效率高
> * 懶漢模式:
> * * 默認不會實例化,外部什么時候調用什么時候`new`
> * * 懶漢式加載是在使用時才會去`new` 實例的,那么`new`的時候是一個動態的過程,并發情況下可能會出現多個,那就是加`同步鎖`,避免這種情況發生。
> * * 懶漢式什么時候需要什么時候實例化,相對來說不浪費內存。
```
class Config
{
private static $instance = null;
private function __construct(){}
private function __clone(){}
public static function getInstance()
{
//檢測當前類屬性$instance是否已經保存了當前類的實例
if (self::$instance == null) {
//如果沒有,則創建當前類的實例
self::$instance = new self();
}
//如果已經有了當前類實例,就直接返回,不要重復創建類實例
return self::$instance;
}
}
```
## 工廠模式 `Factory`
* 一個類通過本身的靜態方法來,實例化一個類并返回一個實例對象;
## 策略模式
## 觀察模式
## 注冊模式
* 框架容器使用的是 注冊模式
* 解決全局共享和交換對象。已經創建好的對象,掛在到某個全局可以使用的數組上,在需要使用的時候,直接從該數組上獲取即可。將對象注冊到全局的樹上。任何地方直接去訪問。
```
<?php
class Register
{
protected static $objects;
public function set($alias,$object)//將對象注冊到全局的樹上
????{
self::$objects[$alias]=$object;//將對象放到樹上
????}
public static function get($name)
????{
returnself::$objects[$name];//獲取某個注冊到樹上的對象
????}
public function __unset($alias)
????{
unset(self::$objects[$alias]);//移除某個注冊到樹上的對象。
????}
}
```
## 適配器模式
* 定義接口,繼承接口類必須實現接口方法
* 例:PHP中的數據庫操作有MySQL,MySQLi,PDO三種,可以用適配器模式統一成一致,使不同的數據庫操作,統一成一樣的API
```
<?php
interfaceIDatabase
{
function connect($host,?$user,?$passwd,?$dbname);
function query($sql);
function close();
}
```
## 原型模式
## 裝飾器模式
- 簡介
- PHP
- 字符串函數
- 數組函數
- 正則
- 加密函數
- 面向對象
- 關鍵字
- 設計模式
- 魔術方法
- 機制擴展
- 會話機制
- PHP框架
- laravel
- 問題
- swoole
- easyswoole
- workerman
- 數據庫
- Sphinx
- MongoDB
- MemCache
- Redis
- 基礎操作
- 數據類型
- 持久化
- 分布式鎖
- 內存模型
- redis高級特性
- MySql
- 基礎操作
- 數據類型
- 數據表引擎
- 鎖機制
- 事務處理
- 存儲過程
- 觸發器
- 索引
- 關聯查詢
- 分析SQL語句-優化查詢
- 分區分表
- 主從復制
- MySql安全性
- 網絡協議
- HTTP
- header詳解
- 狀態碼
- nginx-配置
- 邏輯算法
- 時間和空間復雜度
- 常見算法
- 數據結構
- 核心
- 進程、線程、協程
- 存儲容量-計量單位
- 開發軟件及配置
- 版本控制器
- Git
- Fidder
- Fidder-Android7
- 自動化部署
- Jenkins
- supervisor
- Elasticsearch
- LogStash
- RabbitMQ
- AB測試
- JAVA-JDK
- FileBeat
- PhpStorm
- Composer
- Linux
- API安全
- 高并發及大流量相關概念
- 網站優化
- WEB
- Electron