# 框架和設計模式的區別
有很多程序員往往把框架模式和設計模式混淆,認為MVC是一種設計模式。實際上它們完全是不同的概念。
框架、設計模式這兩個概念總容易被混淆,其實它們之間還是有區別的。框架通常是代碼重用,而設計模式是設計重用,架構則介于兩者之間,部分代碼重用,部分設計重用,有時分析也可重用。
在軟件生產中有三種級別的重用:
1. 內部重用,即在同一應用中能公共使用的抽象塊;
2. 代碼重用,即將通用模塊組合成庫或工具集,以便在多個應用和領域都能使用;
3. 應用框架的重用,即為專用領域提供通用的或現成的基礎結構,以獲得最高級別的重用性。
框架與設計模式雖然相似,但卻有著根本的不同。設計模式是對在某種環境中反復出現的問題以及解決該問題的方案的描述,它比框架更抽象;框架可以用代碼表示,也能直接執行或復用,而對模式而言只有實例才能用代碼表示;設計模式是比框架更小的元素,**一個框架中往往含有一個或多個設計模式,框架總是針對某一特定應用領域,但同一模式卻可適用于各種應用**。可以說,框架是軟件,而設計模式是軟件的知識。
框架模式有哪些?
MVC、MTV、[MVP](http://baike.baidu.com/subview/7294/10754979.htm)、CBD、[ORM](http://baike.baidu.com/view/197951.htm) 等等;
## 框架有哪些?
[C++](http://baike.baidu.com/view/824.htm)語言的QT、MFC、gtk,Java語言的 [SSH](http://baike.baidu.com/view/16184.htm) 、[SSI](http://baike.baidu.com/view/188371.htm),php語言的 smarty(MVC模式),python語言的django(MTV模式)等等
## 設計模式有哪些?
[工廠模式](http://baike.baidu.com/view/1306799.htm)、適配器模式、策略模式等等
簡而言之:框架是大智慧,用來對軟件設計進行分工;設計模式是小技巧,對具體問題提出解決方案,以提高代碼復用率,降低耦合度。