# 設計模式的分類
### <blockquote class='info'>創建型模式</blockquote>
這類模式提供創建對象的機制,能夠提升已有代碼的靈活性和可復用性。
### <blockquote class='info'>結構型模式</blockquote>
這類模式介紹如何將對象和類組裝成較大的結構,并同時保持結構的靈活和高效。
### <blockquote class='info'>行為模式</blockquote>
這類模式負責對象間的高效溝通和職責委派。
*****
### <blockquote class='danger'>1.創建型模式:</blockquote>
*這類模式提供創建對象的機制, 能夠提升已有代碼的靈活性和可復用性。*
###### 單例 Singleton
* 讓你能夠保證一個類只有一個實例, 并提供一個訪問該實例的全局節點。
###### 工廠方法 FactoryMethod
* 其在父類中提供一個創建對象的方法, 允許子類決定實例化對象的類型。
###### 抽象工廠 AbsractFactory
* 它能創建一系列相關的對象, 而無需指定其具體類。
###### 生成器 Builder
* 使你能夠分步驟創建復雜對象。 該模式允許你使用相同的創建代碼生成不同類型和形式的對象。
###### 原型 Prototype
* 使你能夠復制已有對象, 而又無需使代碼依賴它們所屬的類。
*****
### <blockquote class='danger'>2.結構型模式:</blockquote>
*結構型模式介紹如何將對象和類組裝成較大的結構, 并同時保持結構的靈活和高效。*
###### 外觀 Facacde
* 能為程序庫、 框架或其他復雜類提供一個簡單的接口。
###### 適配器 Adapter
* 它能使接口不兼容的對象能夠相互合作。
###### 裝飾器 Decorator
* 允許你通過將對象放入包含行為的特殊封裝對象中來為原對象綁定新的行為。
###### 代理 Proxy
* 讓你能夠提供對象的替代品或其占位符。 代理控制著對于原對象的訪問, 并允許在將請求提交給對象前后進行一些處理。
###### 組合 Composite
* 你可以使用它將對象組合成樹狀結構, 并且能像使用獨立對象一樣使用它們。
###### 橋接 Bridge
* 可將一個大類或一系列緊密相關的類拆分為抽象和實現兩個獨立的層次結構, 從而能在開發時分別使用。
###### 享元 Flyweight
* 它摒棄了在每個對象中保存所有數據的方式, 通過共享多個對象所共有的相同狀態, 讓你能在有限的內存容量中載入更多對象。
*****
### <blockquote class='danger'>3.行為模式:</blockquote>
*行為模式負責對象間的高效溝通和職責委派*。
###### 觀察者 Observer
* 允許你定義一種訂閱機制, 可在對象事件發生時通知多個 “觀察” 該對象的其他對象。
###### 策略 Strategy
* 它能讓你定義一系列算法, 并將每種算法分別放入獨立的類中, 以使算法的對象能夠相互替換。
###### 迭代器 Iterator
* 讓你能在不暴露集合底層表現形式 (列表、 棧和樹等) 的情況下遍歷集合中所有的元素。
###### 命令 Command
* 它可將請求轉換為一個包含與請求相關的所有信息的獨立對象。 該轉換讓你能根據不同的請求將方法參數化、 延遲請求執行或將其放入隊列中, 且能實現可撤銷操作。
###### 責任鏈 Chain of Reposibility
* 允許你將請求沿著處理者鏈進行發送。 收到請求后, 每個處理者均可對請求進行處理, 或將其傳遞給鏈上的下個處理者。
###### 中介者 Mediator
* 能讓你減少對象之間混亂無序的依賴關系。 該模式會限制對象之間的直接交互, 迫使它們通過一個中介者對象進行合作。
###### 備忘錄 Memento
* 允許在不暴露對象實現細節的情況下保存和恢復對象之前的狀態。
###### 狀態 State
* 讓你能在一個對象的內部狀態變化時改變其行為, 使其看上去就像改變了自身所屬的類一樣。
###### 模板方法 Template Method
* 它在超類中定義了一個算法的框架, 允許子類在不修改結構的情況下重寫算法的特定步驟。
###### 訪問者 Visitor
* 它能將算法與其所作用的對象隔離開來。
<blockquote class='danger'>下面將為大家分別介紹22種設計模式及php代碼實現。</blockquote>
- 前言:為什么要學數據結構和算法?
- 第一章:數據結構和算法
- 什么是數據結構?
- 什么是算法?
- 1.從接口開始
- 2.算法分析
- 3.ArrayList
- 4.LinkedList
- 5.雙鏈表
- 6.樹的遍歷
- 7.到達的哲學
- 8.索引器
- 9.Map接口
- 10.哈希
- 11.HashMap
- 12.TreeMap-二叉樹
- 13.二叉搜索樹
- 14.數據持久化
- 15.排序
- 第二章:經典算法解析
- 1.兩數之和
- 2.兩數相加
- 3.無重復字符的最長子字符串
- 4.兩個排序數組的中值
- 5.最長回文子串
- 6.鋸齒形變換
- 7.反轉整數
- 8.合并K個排序列表
- 9.鏈表循環
- 10.除Self之外的數組乘積
- 11.4的威力
- 12.蛙跳
- 13.將交叉口大小設置為至少兩個
- 14.最大的塊,使其分類
- 15.到達點
- 16.階乘零點函數的前像大小
- 17.建造一個大的島嶼
- 18.唯一字母串
- 19.樹的距離之和
- 20.猜詞游戲
- 21.節點的最短路徑
- 22.矩形區域II
- 23.K-相似字符串
- 24.雇傭K工人的最低成本
- 25.至少為K的最短子陣
- 26.獲取所有key的最短路徑
- 27.加油站的最小數量
- 28.有利可圖的計劃
- 29.細分圖中的可達節點
- 30.超級蛋掉落
- 31.最大頻率疊加
- 32.有序隊列
- 33.最多N個給定數字集的數字
- 34.DI序列的有效置換
- 35.貓和老鼠
- 第三章:高級算法解析
- 找出數組中重復的數字
- 不修改數組找出重復的數字
- 二維數組中的查找
- 替換空格
- 從尾到頭打印鏈表
- 重建二叉樹
- 二叉樹的下一個結點
- 用兩個棧實現隊列
- 用兩個隊列實現棧用兩個隊列實現棧
- 斐波那契數列
- 跳臺階
- 變態跳臺階
- 矩形覆蓋
- 旋轉數組的最小數字
- 矩陣中的路徑
- 機器人的移動范圍
- 剪繩子
- 二進制中 1 的個數
- 數值的整數次方
- 打印從 1 到最大的 n 位數
- 在O(1)時間內刪除鏈表節點
- 刪除鏈表中重復的節點
- 正則表達式匹配
- 表示數值的字符串
- 調整數組順序使奇數位于偶數前面
- 鏈表中倒數第k個結點
- 鏈表中環的入口結點
- 反轉鏈表
- 合并兩個排序的鏈表
- 樹的子結構
- 二叉樹的鏡像
- 對稱的二叉樹
- 順時針打印矩陣
- 包含min函數的棧
- 棧的壓入、彈出序列
- 不分行從上到下打印二叉樹
- 把二叉樹打印成多行
- 按之字形打印二叉樹
- 二叉搜索樹的后序遍歷序列
- 二叉樹中和為某一值的路徑
- 復雜鏈表的復制
- 二叉搜索樹與雙向鏈表
- 序列化二叉樹
- 字符串的排列
- 數組中出現次數超過一半的數字
- 獲取數組中最小的k個數
- 數據流中的中位數
- 連續子數組的最大和
- 整數中1出現的次數
- 數字序列中某一位的數字
- 把數組排成最小的數
- 把數字翻譯成字符串
- 禮物的最大價值
- 最長不含重復字符的子字符串
- 丑數
- 第一個只出現一次的字符
- 字符流中第一個不重復的字符
- 兩個鏈表的第一個公共結點
- 數字在排序數組中出現的次數
- 0到n-1中缺失的數字
- 數組中數值和下標相等的元素
- 二叉搜索樹的第k個結點
- 二叉樹的深度
- 平衡二叉樹
- 數組中只出現一次的兩個數字
- 數組中唯一只出現一次的數字
- 和為S的兩個數字
- 和為S的連續正數序列
- 翻轉單詞順序
- 左旋轉字符串
- 滑動窗口的最大值
- 撲克牌的順子
- 第四章:設計模式
- 設計模式概述
- 創建型模式
- 工廠方法
- 抽象工廠
- 生成器
- 原型
- 單例
- 結構型模式
- 適配器
- 橋接
- 組合
- 裝飾器
- 外觀
- 享元
- 代理
- 行為模式
- 責任鏈
- 命令
- 迭代器
- 中介者
- 備忘錄
- 觀察者
- 狀態
- 策略
- 模板方法
- 訪問者
- 第五章:服務器運維
- 1.從vim編輯器開始
- 2.文本瀏覽器
- 3.Bash:Shell、.profile、.bashrc、.bash_history
- 4.Bash:處理文件,pwd,ls,cp,mv,rm,touch
- 5.Bash:環境變量,env,set,export
- 6.Bash:語言設置,LANG,locale,dpkg-reconfigure locales
- 7.Bash:重定向,stdin,stdout,stderr,tee,pv
- 8.更多的重定向和過濾:head,tail,awk,grep,sed
- 9.Bash:任務控制,jobs,fg
- 10.Bash:程序退出代碼(返回狀態)
- 11:總結
- 12.文檔:man,info
- 13.文檔:Google
- 14.包管理:Debian 包管理工具aptitude
- 15.系統啟動:運行級別,/etc/init.d,rcconf,update-rc.d
- 16.處理進程,ps,kill
- 17.任務調度:cron,at
- 18.日志:/var/log,rsyslog,logger
- 19.文件系統:掛載,mount,/etc/fstab
- 20.文件系統:修改和創建文件系統,tune2fs,mkfs
- 21.文件系統:修改根目錄,chroot
- 22.文件系統:移動數據,tar,dd
- 23.文件系統:權限,chown,chmod,umask
- 24.接口配置,ifconfig,netstat,iproute2,ss,route
- 25.網絡:配置文件,/etc/network/interfaces
- 26.網絡:封包過濾配置,iptables
- 27.安全 Shell,ssh,sshd,scp
- 28.性能:獲取性能情況,uptime,free,top
- 29.內核:內核消息,dmesg
- 最后:打磨、洗練、重復:總復習
- 最終章:深入學習
- 算法思維導圖
- 學習目標
- 學習路線
- 學習要點
- 學習大綱
- 資源推薦