### php設計模式(11種)
> 什么是設計模式:如果將面向對象當做一門武功,那么設計模式就是其中的一招一式。
硬編碼,侵入式編程
課程地址:http://www.imooc.com/learn/236
資料:http://php.net/manual/zh/book.spl.php

### 魔術方法

1. 工廠模式
描述:
應用:很多高級模式,都依靠工廠模式
實例:

2. 單列模式
不能通過直接實例化,只能間接的實例化,達到一個類只能實例化一次的目的。(實際上有很多方法可以做到,有的并不是嚴格的單例模式,比如實例化模型,單例只是一種手段模式而已,不管什么方式,只要能達到類似的效果都可稱為單例)
3. 注冊器模式
用來將一個對象注冊到全局屬性當中。
將另外一個類注冊到本類當中,同一個成員屬性保存,類似于數據驅動類在模型中。
4. 適配器模式
類似于驅動的設計

5. 策略模式
策略模式的控制反轉
面向對象中很重要的一個思路就是解耦,如果兩個類是互相依賴的一個關系,那么它們之間就是一個緊耦合的設計,這樣不利于我們的去替換其中的某一個環節,而是用了策略模式進行依賴倒置之后我們就可以很方便的替換其中的某一個類。

6. 數據對象映射模式

7. 觀察者模式
類似于鉤子的設計,埋鉤子就是通知,綁定行為就是添加觀察者。
使用場景:當一個事件發生之后,要執行一連串的更新操作,在傳統的一個編程方式中就是在事件的代碼之后直接加入處理的邏輯,當更新的邏輯越來越多之后這個代碼就很難去維護,這種方式是耦合的侵入式的,如果要增加新的邏輯就需要修改事件主體的代碼,觀察者模式就可以實現低耦合非侵入式的一種通知于更新的機制。

8. 原型模式


9. 裝飾器模式

10. 迭代器模式

11. 代理模式
典型的就是讀寫分離

### 面向對象的基本原則:

MVC結構(一般不稱為設計模式)

裝飾器在MVC中的使用
