# 设计模式的分类
### <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
- 最后:打磨、洗练、重复:总复习
- 最终章:深入学习
- 算法思维导图
- 学习目标
- 学习路线
- 学习要点
- 学习大纲
- 资源推荐