### **1、设计模式概述**
在软件工程中,设计模式(Design Pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。这个术语是由埃里希·伽玛(Erich Gamma)等人在1990年代从建筑设计领域引入到计算机科学的。
设计模式并不直接用来完成代码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。面向对象设计模式通常以类或对象来描述其中的关系和相互作用,但不涉及用来完成应用程序的特定类或对象。设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对并适应变化的能力。
并非所有的软件模式都是设计模式,设计模式特指软件“设计”层次上的问题。还有其它非设计模式的模式,如架构模式。同时,算法不能算是一种设计模式,因为算法主要是用来解决计算上的问题,而非设计上的问题。
本系列是常见设计模式的集合以及如何在 PHP 中实现这些设计模式,并为每种模式提供了相应的示例代码。
很多人都知道设计模式,但并非都了解如何在具体应用中实现,基于此我们推出了这一系列教程。
### **2、常用设计模式大全**
设计模式可以按照结构被分成三种不同的类型:
#### **2.1 创建型**
在软件工程中,创建型设计模式用于处理对象的实例化:
* [抽象工厂模式(Abstract Factory)](http://laravelacademy.org/post/2471.html)
* [建造者模式(Builder)](http://laravelacademy.org/post/2489.html)
* [工厂方法模式(Factory Method)](http://laravelacademy.org/post/2506.html)
* [多例模式(Multiton)](http://laravelacademy.org/post/2519.html)
* [对象池模式(Pool)](http://laravelacademy.org/post/2532.html)
* [原型模式(Prototype)](http://laravelacademy.org/post/2546.html)
* [简单工厂模式(Simple Factory)](http://laravelacademy.org/post/2643.html)
* [单例模式(Singleton)](http://laravelacademy.org/post/2599.html)
* [静态工厂模式(Static Factory)](http://laravelacademy.org/post/2647.html)
#### **2.2 结构型**
结构型设计模式用于处理类和对象的组合:
* [适配器模式(Adapter)](http://laravelacademy.org/post/2660.html)
* [桥梁模式(Bridge)](http://laravelacademy.org/post/2680.html)
* [组合模式(Composite)](http://laravelacademy.org/post/2699.html)
* [数据映射模式(Data Mapper)](http://laravelacademy.org/post/2739.html)
* [装饰模式(Decorator)](http://laravelacademy.org/post/2760.html)
* [依赖注入模式(Dependency Injection)](http://laravelacademy.org/post/2792.html)
* [门面模式(Facade)](http://laravelacademy.org/post/2807.html)
* [流接口模式(Fluent Interface)](http://laravelacademy.org/post/2828.html)
* [代理模式(Proxy)](http://laravelacademy.org/post/2841.html)
* [注册模式(Registry)](http://laravelacademy.org/post/2850.html)
#### **2.3 行为型**
行为型设计模式用于处理类的对象间通信:
* [责任链模式(Chain Of Responsibilities)](http://laravelacademy.org/post/2858.html)
* [命令行模式(Command)](http://laravelacademy.org/post/2871.html)
* [迭代器模式(Iterator)](http://laravelacademy.org/post/2882.html)
* [中介者模式(Mediator)](http://laravelacademy.org/post/2894.html)
* [备忘录模式(Memento)](http://laravelacademy.org/post/2903.html)
* [空对象模式(Null Object)](http://laravelacademy.org/post/2912.html)
* [观察者模式(Observer)](http://laravelacademy.org/post/2935.html)
* [规格模式(Specification)](http://laravelacademy.org/post/2960.html)
* [状态模式(State)](http://laravelacademy.org/post/2971.html)
* [策略模式(Strategy)](http://laravelacademy.org/post/2990.html)
* [模板方法模式(Template Method)](http://laravelacademy.org/post/3006.html)
* [访问者模式(Visitor)](http://laravelacademy.org/post/3024.html)
#### **2.4 其它**
* [委托模式(Delegation)](http://laravelacademy.org/post/3038.html)
* [服务定位器模式(Service Locator)](http://laravelacademy.org/post/2820.html)
* [资源库模式(Repository)](http://laravelacademy.org/post/3053.html)
- 前言
- php
- 设计模式
- 代码安全
- 性能测试
- 自动化测试
- 项目质量
- 自动化部署
- 掌握框架
- laravel5.8
- laravel声明周期
- mysql
- 物理文件组成
- 存储引擎和优化
- 权限和安全
- 备份和恢复
- 查询优化
- 索引优化
- 主从架构
- 监测工具
- redis
- redis简介
- redis存储
- windows下 php7.3+redis3 安装
- 参数配置说明
- redis 数据类型
- 缓存穿透和缓存雪崩问题
- redis并发竞争key问题
- thinkphp5+redis+mysql抢票示例
- apache
- nginx
- Nginx服务器的安装部署
- Nginx服务器架构
- Nginx服务器的高级配置
- Nginx服务器的Rewrite功能
- Nginx服务器的代理服务
- Nginx服务器的缓存机制
- Nginx源码结构
- Nginx基本数据结构
- 微服务
- 分布式
- 前后端分离解决方案
- 服务端实现
- thinkphp5
- laravel5
- 客户端实现H5
- vue.js
- element-ui
- vue-cli
- 客户端APP
- 客户端小程序
- 代码自动生成
- 商城项目实战
- 系统架构