### php设计模式(11种)
> 什么是设计模式:如果将面向对象当做一门武功,那么设计模式就是其中的一招一式。
硬编码,侵入式编程
课程地址:http://www.imooc.com/learn/236
资料:http://php.net/manual/zh/book.spl.php
![](https://box.kancloud.cn/2016-08-27_57c170302ad86.png)
### 魔术方法
![](https://box.kancloud.cn/d5b482dac6f1e3f906db91fa3a5d5b63_842x466.png)
1. 工厂模式
描述:
应用:很多高级模式,都依靠工厂模式
实例:
![](https://box.kancloud.cn/4b5204597e798551de10b48d212f3400_844x466.png)
2. 单列模式
不能通过直接实例化,只能间接的实例化,达到一个类只能实例化一次的目的。(实际上有很多方法可以做到,有的并不是严格的单例模式,比如实例化模型,单例只是一种手段模式而已,不管什么方式,只要能达到类似的效果都可称为单例)
3. 注册器模式
用来将一个对象注册到全局属性当中。
将另外一个类注册到本类当中,同一个成员属性保存,类似于数据驱动类在模型中。
4. 适配器模式
类似于驱动的设计
![](https://box.kancloud.cn/8135fc46d861336644cc947b13920c36_855x469.png)
5. 策略模式
策略模式的控制反转
面向对象中很重要的一个思路就是解耦,如果两个类是互相依赖的一个关系,那么它们之间就是一个紧耦合的设计,这样不利于我们的去替换其中的某一个环节,而是用了策略模式进行依赖倒置之后我们就可以很方便的替换其中的某一个类。
![](https://box.kancloud.cn/78a37193e2f0c8311cc120cedc38c98b_851x471.png)
6. 数据对象映射模式
![](https://box.kancloud.cn/8b3d4c50c392a64530bf1745cac27b57_850x463.png)
7. 观察者模式
类似于钩子的设计,埋钩子就是通知,绑定行为就是添加观察者。
使用场景:当一个事件发生之后,要执行一连串的更新操作,在传统的一个编程方式中就是在事件的代码之后直接加入处理的逻辑,当更新的逻辑越来越多之后这个代码就很难去维护,这种方式是耦合的侵入式的,如果要增加新的逻辑就需要修改事件主体的代码,观察者模式就可以实现低耦合非侵入式的一种通知于更新的机制。
![](https://box.kancloud.cn/470ee9a225f624da35ca82410eb0aa9a_843x466.png)
8. 原型模式
![](https://box.kancloud.cn/dcedf9f55354412050727e3cdee6c555_814x451.png)
![](https://box.kancloud.cn/6901dd7acbf27270f5cce2b61500df6a_814x451.png)
9. 装饰器模式
![](https://box.kancloud.cn/8c0f85519a97b8d7954ead94af34b235_836x464.png)
10. 迭代器模式
![](https://box.kancloud.cn/2bb44bd62f6e24efa7c70faca160fbc6_840x423.png)
11. 代理模式
典型的就是读写分离
![](https://box.kancloud.cn/2b52d9f70c41aee76f2537dc0c21e442_812x416.png)
### 面向对象的基本原则:
![](https://box.kancloud.cn/a93337b0a4fdae618ff9a9dc125990c5_807x448.png)
MVC结构(一般不称为设计模式)
![](https://box.kancloud.cn/d432d92521b978bafcc75a52b90a03d1_809x444.png)
装饰器在MVC中的使用
![](https://box.kancloud.cn/8f629a41bb5a56e26a136f99c3e85e5f_809x444.png)