前言 1
第1部分 轻松掌握设计模式基础 13
第1章 PHP与面向对象编程 13
1.1中级和高级编程初探 13
1.2为什么采用面向对象编程 14
1.2.1解决问题更容易 14
1.2.2模块化 15
1.3类与对象 16
1.3.1单一职责原则 16
1.3.2 PHP中的构造函数 17
1.4客户类作为请求者 17
1.5速度如何 21
1.5.1开发和修改速度 21
1.5.2团队速度 21
1.6顺序和过程式编程有什么问题 22
1.6.1顺序编程 22
1.6.2过程编程 22
1.6.3即时回报还是长期回报 23
第2章 OOP基本概念 25
2.1抽象 25
2.1.1抽象类 26
2.1.2抽象属性和方法 27
2.1.3接口 29
2.1.4接口和常量 31
2.1.5类型提示:类似数据类型 32
2.2封装 34
2.2.1日常生活中的封装 35
2.2.2通过可见性保护封装 35
2.2.3获取方法和设置方法 38
2.3继承 39
2.4多态 41
2.4.1一个名字,多个实现 43
2.4.2设计模式中的内建多态性 44
2.5慢慢来 44
第3章 基本设计模式概念 46
3.1 MVC实现编程松耦合和重新聚焦 46
3.2设计模式基本原则 48
3.2.1第一个设计模式原则 49
3.2.2代码提示中使用接口数据类型 50
3.2.3抽象类及其接口 51
3.2.4第二个设计模式原则 53
3.2.5使用客户的基本组合 54
3.2.6委托:IS-A和HAS-A的差别 58
3.3设计模式作为备忘录 58
3.4选择设计模式 59
3.4.1是什么导致了重新设计 60
3.4.2什么会变化 60
3.4.3设计模式与框架有什么区别 61
第4章 结合使用设计模式和UML 62
4.1为什么是统一建模语言(UML) 62
4.2类图 63
4.3参与者符号 64
4.4关系说明 66
4.4.1相识关系 66
4.4.2聚合关系 68
4.4.3继承和实现关系 70
4.4.4创建关系 72
4.4.5多重关系 73
4.5对象图 73
4.6交互图 74
4.7面向对象编程中图和记法的作用 75
4.8 UML工具 75
4.9其他UML 76
第2部分 创建型设计模式 81
第5章 工厂方法设计模式 81
5.1什么是工厂方法模式 81
5.2何时使用工厂方法 82
5.3最简单的例子 83
5.3.1工厂的工作 83
5.3.2客户 86
5.4适应类的修改 86
5.4.1增加图像元素 86
5.4.2调整产品 87
5.4.3修改文本产品 89
5.4.4修改图像产品 90
5.4.5增加新产品和参数化请求 91
5.4.6一个工厂多个产品 92
5.4.7新工厂 92
5.4.8新产品 93
5.4.9有参数的客户 95
5.4.10辅助类 96
5.4.11文件图 97
5.4.12产品改变:接口不变 97
第6章 原型设计模式 100
6.1原型设计模式 100
6.2何时使用原型模式 101
6.3克隆函数 102
6.3.1克隆不会启动构造函数 103
6.3.2构造函数不要做具体工作 104
6.4最简单的原型例子 105
6.5为原型模式增加OOP 108
6.5.1现代企业组织 109
6.5.2接口中的封装 109
6.5.3接口实现 111
6.5.4组织客户 113
6.5.5完成修改增加特性 115
6.5.6动态对象实例化 116
6.6 PHP世界中的原型 118
第3部分 结构型设计模式 123
第7章 适配器模式 123
7.1什么是适配器模式 123
7.2何时使用适配器模式 124
7.3使用继承的适配器模式 126
7.4使用组合的适配器模式 130
7.4.1从桌面环境转向移动环境 131
7.4.2适配器和变化 139
第8章 装饰器设计模式 140
8.1什么是装饰器模式 140
8.2何时使用装饰器模式 141
8.3最简单的装饰器例子 142
8.3.1 Component接口 142
8.3.2 Decorator接口 143
8.3.3具体组件 144
8.3.4具体装饰器 145
8.3.5客户 146
8.4关于包装器 148
8.4.1包装器包装基本类型 148
8.4.2 PHP中的内置包装器 148
8.4.3设计模式包装器 149
8.5包装多个组件的装饰器 150
8.5.1多个具体组件 150
8.5.2包含多个状态和值的具体装饰器 151
8.5.3开发人员约会服务 151
8.6 HTML用户界面 157
8.6.1 Client类传递HTML数据 161
8.6.2从变量名到对象实例 162
8.6.3增加装饰 162
第4部分 行为型设计模式 167
第9章 模板方法模式 167
9.1什么是模板方法模式 167
9.2何时使用模板方法 168
9.3最简单的例子:对图像和图题使用模板方法模式 169
9.3.1抽象类 169
9.3.2具体类 170
9.4客户 170
9.5好莱坞原则 171
9.6结合其他设计模式使用模板方法模式 173
9.6.1客户工作负担减轻 174
9.6.2模板方法参与者 174
9.7工厂方法参与者 175
9.8模板方法设计模式中的钩子 178
9.8.1建立钩子 180
9.8.2实现钩子 181
9.8.3客户以及捕获钩子 182
9.9短小精悍的模板方法模式 183
第10章 状态设计模式 185
10.1什么是状态模式 185
10.2何时使用状态模式 186
10.3状态机 187
10.4开灯关灯:最简单的状态设计模式 188
10.4.1情境为王 188
10.4.2状态 191
10.4.3客户通过上下文做出请求 193
10.5增加状态 194
10.5.1改变接口 194
10.5.2改变状态 195
10.5.3更新Context类 197
10.5.4更新客户 199
10.6导航工具:更多选择和单元格 199
10.6.1建立一个矩阵状态图 200
10.6.2建立接口 201
10.6.3上下文 202
10.6.4状态 204
10.6.5客户选择一条路径 210
10.7状态模式与PHP 212
第5部分 MySQL和PHP设计模式 215
第11章 通用类负责连接,代理模式保证安全 215
11.1一个简单的MySQL接口和类 215
11.1.1重要的接口 216
11.1.2通用MySQL连接类和静态变量 216
11.1.3简单客户 218
11.2保护代理完成登录 219
11.2.1建立登录注册 220
11.2.2实现登录代理 224
11.3代理和真实世界安全 230
第12章 策略设计模式的灵活性 232
12.1封装算法 232
12.1.1区分策略和状态设计模式 233
12.1.2请不要加条件语句 234
12.1.3算法族 234
12.2最简单的策略模式 235
12.2.1客户和触发器脚本 235
12.2.2 Context类和Strategy接口 239
12.2.3具体策略 240
12.3增加数据安全性和参数化算法来扩展策略模式 243
12.3.1数据安全性辅助类 243
12.3.2为算法方法增加参数 246
12.3.3调查表 246
12.3.4数据输入模块 248
12.3.5客户请求帮助 253
12.3.6 Context类重要的小改变 254
12.3.7具体策略 255
12.4灵活的策略模式 260
第13章 职责链设计模式 262
13.1推卸责任 262
13.2 MySQL咨询台中的职责链 264
13.2.1构建和加载响应表 264
13.2.2咨询台职责链 269
13.3自动职责链和工厂方法 274
13.3.1职责链和日期驱动请求 275
13.3.2工厂方法完成任务 278
13.4易于更新 284
第14章 利用观察者模式构建多设备CMS 285
14.1内置观察者接口 285
14.2何时使用观察者模式 286
14.3使用SPL实现观察者模式 287
14.3.1 SplSubject 288
14.3.2 SplObserver 289
14.3.3 SplObjectStorage 289
14.3.4 SPL具体主题 289
14.3.5 SPL具体观察者 291
14.3.6 SPL客户 291
14.4自由的PHP和观察者模式 293
14.4.1抽象Subject类和ConcreteSubject实现 293
14.4.2观察者和多个具体观察者 294
14.4.3客户 296
14.5建立一个简单CMS 298
14.5.1 CMS工具 298
14.5.2多个设备观察者 303
14.6用OOP方式思考 315