课程简介
<设计模式>自从1995年一书出版,已经25周年以上了. 如今,对于很多人来说,设计模式已经成为开发标准词典的一部分.25年来,设计模式思想影响了整整一代软件从业者.而且可以预料,它的影响还将继续下去.可是目前国内的大部分程序员学习设计模式和原则之后,往往是不知道如何使用模式,或者滥用模式(言必称模式),最终放弃不用模式,这样三个阶段,最终导致设计模式思想还远没有真正广泛应用,更没有起到应有的作用,因而导致很多对设计模式的误解(学习设计模式无用论).该课程就是针对学习设计模式这3个经典错误问题而开设的.
作为为一门高级课程,若内容缺乏实务便易流于抽象与空泛。 本课程除了深入剖析各种典型的设计模式之原理与结构外, 同时会抽取大量知名程序库中的设计模式,利用其源码辅助并加强原理讲解。并且结合讲师大量实际项目案例进行分析. 这种方式对于设计模式的学习有着极大效果。 与其它的仍然沿用传统模式目录方式逐一讲述每一模式的意图,结构,适应性等的培训和图书完全不同.
课程1/3的时间介绍设计模式思想和原理,1/3时间案例,并且要求学员组合成小组进行现场设计. 最后1/3时间再介绍该案例的设计过程,讲师带领大家一起对设计结果进行分析,指出不”和谐”的地方,通过逐步运用模式,改善设计. 而不是把最完美的答案一下子放到学员的面前,让你佩服.并且分析为什么使用模式,而不是过度设计,为什么又要放弃模式. 因为了解优秀软件设计的演变过程比学习优秀设计本身更有价值,因为设计的演变过程之中蕴藏着大智慧.培训时根据实际情况,可以安排学员自己的项目代码或者设计作为课程案例进行分析和设计。
课程对象
我们已经为几十家企业提供了多次培训和咨询服务,以下企业已经选择了我们的内训课程
互联网研发企业,比如百度研发中心,阿里巴巴, 腾讯 ,畅唐科技, 猎豹移动(原金山移动)
电信研发企业,比如思科研发中心,阿尔卡特-朗讯研发中心,华为研发中心,摩托罗拉研发中心,大唐电信研发,广州从兴电子,亿阳通信 , 爱立信研发中心,鼎桥通信技术, 艾默生研发中心,中兴通讯研发中心,
广州诚毅科技研发中心,神州数码网络通信研发中心,北京全路通信信号研究设计院,上海贝尔电信
企业软件研发企业,比如Adobe中国研发中心,北京久其研发中心,博古中国研发中心,金蝶深圳研发中心, EMC中国研发中心(北京和上海),VMware中国研发中心,珠海远光,爱德万测试有限公司advantest
嵌入式软件企业,比如阿尔卑斯中国研发中心,德国M&M Software,西门子研发中心, Sony研发中心,金立智能研究院,南车研发中心,德塞西威,霍尼韦尔研发中心, 东芝中国研发中心, 汇川科技, 霍尼韦尔
外包类企业,联盟计算机服务
金融行业:恒生电子,华腾,中国人民银行研发中心,工商行研发中心,平安科技研发中心,建行研发中心,深圳登记结算研发中心,花旗银行中国研发中心
课程内容
模式 类型 | 6个大型项目案例涉及软件原则和模式 | 备注 |
面向对象设计原则 | 单一职责原则 (SRP) 变化分离 “开-闭”原则(OCP)对可变性封装 里氏替换原则(LSP) 如何进行继承 接口隔离原则(ISP) 恰当的划分角色和接口 依赖倒转原则(DIP) 针对接口编程 | |
编程 范式 | 介绍常见的编程范式有:函数式编程、程序编程、面向对象编程、面向过程,指令式编程等。 | |
GOF设计模式 | Singleton模式/Builder模式/Simple Factory模式 Factory Method模式/ Strategy/Observer/Chain of Responsibility/Command/Template Method/Adapter/Proxy/Façade/Bridge/Decorator/Composite/Visitor | 课程案例主要涉及15种GOF常用设计模式,也重点学习这些模式 |
架构 模式 | Pipe Filter架构模式/Layer架构模式/Microkernel Pattern/MVC/ | 案例涉及这些架构模式,在高层设计 |
课程大纲
课程内容安排(该内容为3天版本,具体内容和顺序根据现场学员情况可能进行调整)
第一篇: 设计模式-设计原理与面向对象设计思维 | ||
主题 | 培训内容 | 备注 |
第1单元 为什么需要设计模式
| 内容一:软件设计模式---模式到底是什么?价值在哪里? 1. 什么是模式 2. 为什么需要设计模式? 难道就为了面试吗? 3. 设计模式能够给我们带来什么? 4. 设计模式学习面临的困难和解决思路 5. 从了解模式到正确应用模式 1. 练习---某业务系统,在使用模式前解决方案 和 使用模式后的对比
内容二:软件设计模式本质—你真的知道模式背后的原理吗? 1. 发现变化进行封装变化 2. 把变化与不变必须分离 3. 针对接口的编程,而不是针对实现 4. 组合优于继承 1. 练习—某认证项目设计分析,分析模式背后的本质
内容三:什么是好的设计-----难道使用设计模式就是好的设计吗? 1. 什么是好的设计? 2. 难道不使用设计模式就是坏的设计吗? 3. 为什么需求变化总是使你痛苦? 和你的设计有关系吗? 4. 好的系统设计应该有如下的性质:可扩展性、灵活性、可插入性。 5. 设计模式可以使你的设计更灵活,更易复用,更具可扩展性 练习—某项目4种设计方案的对比, 那种更合适?多种方案的对比 | |
第2单元 面向对象设计思维与原理
| 内容一:面向对象思维是模式基础 1. 面向对象分析与设计的本质 2. 面向对象设计思维与面向过程设计思维—职责驱动设计 3. 抽象本质 4. 封装本质 5. 继承本质 6. 多态本质 7. 面向对象常见的错误认识—思考OO带来的价值 8. 为什么学习设计模式需要面向对象思维 9. 从面向对象到模式到再到真正的面向对象 10. 练习—某ERP项目, 使用面向对象设计和过程化设计 PK,,难道面向对象就一定是最优的? 你真正理解面向对象吗? 面向对象到底真正有哪些好处, 不要人云亦云 !
内容二:面向对象设计原则(principles) 1. 依赖倒置原则(DIP) 2. 开放封闭原则(OCP) 3. 单一职责原则(SRP) 4. Liskov 替换原则(LSP) 5. 接口隔离原则(ISP) 6. 练习—每组原则,分别通过案例进行分析,为什么需要使用原则进行考虑
| |
第二篇: 设计模式精讲------创建型 | ||
第3单元 创建型模式
| 内容一:创建型模式(principles) 1. 简单创建型工厂 2. Factory Method(工厂方法) 3. Abstract Factory(抽象工厂) 4. Builder(生成器) 5. Prototype(原型) 6. Singleton(单件) 7. 创建型模式的讨论 | |
第4单元 创建型模式精讲
| 内容一:简单工厂模式 1. 简单工厂模式概述 2. 简单工厂模式结构与实现 3. 简单工厂模式结构 4. 简单工厂模式实现 5. 简单工厂模式应用实例 6. 关于创建对象与使用对象 7. 简单工厂模式的简化 8. 简单工厂模式优/缺点与适用环境 9. 简单工厂模式优点
内容二:工厂方法模式 1. 工厂方法模式概述 2. 工厂方法模式结构与实现 3. 工厂方法模式结构 4. 工厂方法模式实现 5. 工厂方法模式应用实例 6. 工厂方法模式优/缺点与适用环境 7. 工厂方法模式优点
内容三:抽象工厂模式 1. 产品等级结构与产品族 2. 抽象工厂模式概述 3. 抽象工厂模式结构与实现 4. 抽象工厂模式结构 5. 抽象工厂模式实现 6. 抽象工厂模式应用实例
内容四:单例模式模式 1. 单例模式概述 2. 单例模式结构与实现 3. 单例模式结构 4. 单例模式实现 5. 单例模式应用实例 6. 饿汉式单例与懒汉式单例 7. 单例模式优/缺点与适用环境 8. 单例模式优点
内容五:其他创建型模式 1. Builder(生成器)模式概述 2. Builder(生成器)模式结构与实现 3. Prototype(原型)模式概述 4. Prototype(原型)式结构与实现
内容六:创建型模式的应用案例分析 1. 创建型的应用案例分析
| |
第三篇: 设计模式精讲------结构性型 | ||
第5单元 结构型模式
| 内容一:结构型模式(principles) 1. Adapter(适配器)—类对象结构型模式 2. Bridge(桥接)—对象结构型模式 3. Composite(组成)—对象结构型模式 4. Decorator(装饰)—对象结构型模式 5. FACADE(外观)—对象结构型模式 6. Flyweight(享元)—对象结构型模式 7. Proxy(代理)—对象结构型模式 8. 结构型模式的讨论 9. Adapter与Bridge对比与分析 10. Composite、Decorator与Proxy 对比与分析
| |
第6单元 结构型模式精讲
| 内容一:适配器模式 1. 适配器模式概述 2. 对象适配器和类适配器 3. 适配器模式结构与实现 4. 适配器模式应用实例 5. 缺省适配器模式 6. 双向适配器 7. 适配器模式优/缺点与适用环境
内容二:组合模式 1. 组合模式概述 2. 组合模式结构与实现 3. 组合模式应用实例 4. 透明组合模式与安全组合模式 5. 组合模式优/缺点与适用环境 6. 组合模式优点 7. 组合模式缺点 8. 组合模式适用环境
内容三:装饰器模式 1. 装饰模式概述 2. 装饰模式结构与实现 3. 装饰模式应用实例 4. 透明装饰模式与半透明装饰模式 5. 装饰模式优/缺点与适用环境
内容四:Facde外观模式 1. 外观模式概述 2. 外观模式结构与实现 3. 外观模式应用实例 4. 抽象外观类 5. 外观模式优/缺点与适用环境 6. 外观模式适用环境
内容五:结构性模式应用案例 1. 结构型概述应用案例
| |
第四篇: 设计模式精讲------行为型 | ||
第7单元 行为型型模式
| 内容一:行为型模式(principles) 1. CHAIN OF RESPONSIBIL ITY(职责链) —对象行为型模式 2. COMMAND(命令)—对象行为型模式 3. INTERPRETER(解释器)—类行为型模式 4. ITERATOR(迭代器)—对象行为型模式 5. MEDIATOR(中介者)—对象行为型模式 6. MEMENTO(备忘录)—对象行为型模式 7. OBSERVER(观察者)—对象行为型模式 8. STATE(状态)—对象行为型模式 9. STRATEGY(策略)—对象行为型模式 10. TEMPLATE METHOD(模板方法)—类行为型模式 11. VISITOR(访问者)—对象行为型 模式 12. 行为模式的讨论
| |
第8单元 行为型模式精讲
| 内容一:代理模式 1. 代理模式概述 2. 代理模式结构与实现 3. 代理模式应用实例 4. 远程代理 5. 虚拟代理 6. Java动态代理实现 7. 代理模式优/缺点与适用环境
内容二:职责链模式 1. 职责链模式概述 2. 职责链模式结构与实现 3. 职责链模式应用实例 4. 纯与不纯的职责链模式 5. 职责链模式优/缺点与适用环境
内容三:命令模式 1. 命令模式概述 2. 命令模式结构与实现 3. 命令模式结构 4. 命令模式实现 5. 命令模式应用实例 6. 实现命令队列 7. 记录请求日志 8. 实现撤销操作 9. 宏命令 10. 命令模式优/缺点与适用环境
内容四:观察者模式 1. 观察者模式概述 2. 观察者模式结构与实现 3. 观察者模式应用实例 4. JDK对观察者模式的支持 5. 观察者模式与Java事件处理 6. 观察者模式与MVC 7. 观察者模式优/缺点与适用环境
内容五:状态与策略模式 1. 状态模式概述 2. 状态模式结构与实现 3. 状态模式应用实例 4. 共享状态 5. 使用环境类实现状态转换 6. 状态模式优/缺点与适用环境 7. 策略模式概述 8. 策略模式结构与实现 9. 策略模式应用实例 10. 策略模式优/缺点与适用环境
内容六:模板方法模式 1. 模板方法模式概述 2. 模板方法模式结构与实现 3. 模板方法模式应用实例 4. 钩子方法的使用 5. 模板方法模式优/缺点与适用环境 | |
第五篇: 设计模式对比 | ||
第9单元 设计模式对比
| 内容一:模式大PK, 通过对比了解设计模式的细节 1. 创建型模式讨论 a) 简单工场 工厂方法 抽象工场 b) Abstract Factory,builder,Prototype 模式 c) 单例模式 2. 行为型模式 a) Adapter与Bridge b) Composite、Decorator与Proxy c) Façade模式 与 Adapter模式 /Proxy模式 d) Composite 与Iterator模式 3. 结构型模式 a) 封装变化-Strategy/State/ Iterator模式 b) 封装结构---Mediator模式与Facade模式 c) 对象作为参数-- Visitor/Command/Mementor d) 通信应该被封装还是被分布- Mediator和Observer e) 对发送者和接收者解耦-Command模式与职责链模式
将实践中常容易混淆或常常联合使用的几个模式放在一组讨论,对比分析,讲解思想。如何发现、应用更多模式。通过对“相似或相关的设计模式”的对比分析,加深理解,是避免“模式误用”的好方法。 | |
第六篇: 设计模式应用案例 | ||
第10单元 设计模式应用案例
| 内容一:用模式思考系统设计 1. 基于模式的设计系统 2. 用模式思考的过程 3. 模式的应用层次和组合应用模式 4. 基于模式的方法和步骤
内容二:练习案例- Log子系统的设计 1. 介绍项目需求情况,进行设计 2. 通过重构逐步实现设计模式 3. Framework 设计思想—好莱坞原则 4. 学习设计模式(Factory Method, Template Method, Composite, Chain of Responsibility )
| |
第七篇: 重构到设计模式 | ||
第11单元 重构到模式应用案例
通过重构实现模式改善既有的设计,往往优于在新的设计早期使用模式。 | 内容一:重构到模式- 1. 设计坏味道概述 2. 重构思想 3. 理解如何结合重构和模式; 4. 用模式导向的重构(pattern-directed refactoring)改善既有代码的设计; 5. 找出需要进行模式导向重构的代码段; 6. 了解为什么使用模式来改善既有的设计要优于在新的设计早期使用模式。 7. 一组坏味 (也就是问题),表示需要进行模式导向的重构; 8. 实现同一模式的不同方式的示例; 9. 什么时候应该通过重构实现模式、趋向模式以及去除模式给出建议。 10. 常见设计模式的重构演化的过程 7. 练习—通过一个大型电信系统案例分析, 解决如何通过重构引入设计模式
内容二:案例- 遗留系统如何使用设计模式 1. 拒绝退化—“首先不要伤害” 2. 关注点分离 3. . 通过案例分析,如何修改遗留代码,而不破坏现有系统代码结构,引入设计模式 8. 练习—通过一个系统案例分析, 如何在维护遗留系统时, 通过分离制作, 关注点分离, 实现对遗留系统不伤害,从而引入设计模式
内容三:练习案例- 重构到模式 |