軟件設計模式是一種被反復使用的、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性、程序的重用性。設計模式提供了一套通用的設計詞匯和一種通用的語言以方便開發人員之間溝通和交流,使得設計方案更加通俗易懂。對于使用不同編程語言的開發和設計人員可以通過設計模式來交流系統設計方案,每一個模式都對應一個標準的解決方案,設計模式可以降低開發人員理解系統的復雜度。
軟件設計模式有六大原則,包括開閉原則(對擴展開放,對修改封閉)、里氏代換原則(任何基類可以出現的地方,子類一定可以出現)、依賴倒轉原則(針對接口編程,依賴于抽象而不依賴于具體)、接口隔離原則(使用多個隔離的接口,比使用單個接口要好)、迪米特法則(一個實體應當盡量少地與其他實體之間發生相互作用)、合成復用原則(盡量使用合成/聚合的方式,而不是使用繼承)。
設計模式可以分為三大類:創建型模式主要用于創建對象;結構型模式主要用于處理類或對象的組合;行為型模式主要用于描述對類或對象怎樣交互和怎樣分配職責。