[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