=================================================================================软件设计模式应用和案例分析---15周年之际,重新思考如何正确应用设计模式一、课程介绍:2009年是设计模式一书出版15周年.15年来,设计模式思想影响了整整一代程序员.而且可以预料,它的影响还将继续下去.可是目前国内的大部分程序员学习设计模式和原则之后,往往是不知道如何使用模式,滥用模式(言必称模式),最终放弃不用模式,这样三个阶段,最终导致设计模式思想还远没有真正广泛应用,更没有起到应有的作用,因而导致很多对设计模式的误解(学习设计模式无用论).该课程就是针对学习设计模式这3个经典错误问题而开设的.二、课程思想本课程注重实战,不尚空谈.讲师从2001年开始学习设计模式,与大家一样历经了3个漫长的痛苦阶段,直到2006年才真正理解设计模式,开始灵活运用设计模式.讲师根据本人的学习过程和经验来介绍如何解决这些问题.与其他的仍然沿用传统模式目录方式逐一讲述每一模式的意图,结构,适应性等的培训和图书完全不同.课程不仅仅介绍经典的GOF设计模式,而且涉及常见的其他模式和软件架构模式(因为案例涉及,并且是真实项目).该课程首次提出了解决设计模式如何应用的7个步骤:设计模式应用策略1—建立面向对象思维设计模式应用策略2—知道设计模式,知道自己不知道设计模式应用策略3—贴身模仿,研读大师经典作品设计模式应用策略4—根据场景,用模式去思考设计设计模式应用策略5—掌握模式精髓封装变化,使用共性与可变性分析设计模式应用策略6—重构到模式,设计模式是重构的目标设计模式应用策略7—信手拈来,运用自如以上7个步骤针对应用设计模式的不同错误症状,解决如何应用模式.知道模式是什么和真正理解什么时候去应用模式,就完全是不同的境界.以上步骤,都借助于真实项目案例(不是简单的演示之类的Demo,而是真实的系统),展示如何在实际开发之中正确的选择和运用模式,在这些案例之中,在设计时应用模式能看到实实在在的效果(每个案例,均有PK使用之前和使用之后对比).三、课程特色----案例驱动:课程1/3的时间介绍设计模式思想,1/3时间案例,并且要求学员组合成小组进行现场设计.最后1/3时间再介绍该案例的设计过程,讲师带领大家一起对设计结果进行分析,指出不”和谐”的地方,通过逐步运用模式,改善设计.而不是把最完美的答案一下子放到学员的面前,让你佩服.并且分析为什么用,而不是过度设计.因为了解优秀软件设计的演变过程比学习优秀设计本身更有价值,因为设计的演变过程之中蕴藏着大智慧.培训时根据实际情况,可以安排学员自己的项目代码或者设计作为课程案例进行分析和重构.四、对学员要求:=================================================================================该课程适合各类IT/软件企业和研发机构的软件架构师、软件设计师、程序员。特别能够带着设计模式实践时的困惑和问题,效果最佳.到时可以与讲师PK讨论,这样对你帮助会更大,收获也会更多.本课程不是设计模式入门级别课程,不会目录式介绍每一模式的详细细节,因此需要学员课前做好相关准备,最好已经具备模式概念和常见模式的基本知识.最好课前可以简单预习以下模式:五、具体授课安排:模式类型案例涉及模式((((最好提前预习))))备注GOFGOFGOFGOF设计模式Singleton模式/Builder模式/SimpleFactory模式FactoryMethod模式/Strategy/Observer/ChainofResponsibility/Command/TemplateMethod/Adapter/Proxy/Façade/Bridge/Decorator/Composite课程案例仅仅涉及11112222种GOFGOFGOFGOF常用设计模式,,,,也仅仅介绍这些模式((((重点学习,,,,不会逐一介绍23232323种))))其他设计模式ObjectPool模式/DependencyInjection依赖注入/NullObject模式/Plug-In模式/ActiveObject模式/AbstractServer模式虽然不属于GOF,GOF,GOF,GOF,但是经常在软件设计时使用....案例也涉及架构模式PipeFilter架构模式/Layer架构模式/MicrokernelPattern/MVC/案例涉及这些架构模式,,,,在高层设计主题授课内容备注设计模式思想与应用困惑内容一:软件设计模式概述1.设计模式的思想2.设计模式学习面临的困难和解决思路3.从了解模式到正确应用模式设计模式应用策略1111—建立面向对象思维内容一:面向对象思维是模式基石----唯有境界相同方可坐而论道1.面向对象分析与设计的本质2.面向过程设计功能分解3.职责分配驱动OO设计4.面向对象常见的错误认识—思考OO带来的价值5.为什么学习设计模式需要面向对象思维6.设计模式真正应用基石—OO7.从面向对象到模式到再到真正的面向对象内容二:面向对象经典案例––––XXXXXXXXXXXX嵌入式系统1.通过经典面向对象案例,要求学员分别使用过程式和面向对象2种思维,进行设计2.进行对比2种思维的不同点和结果3.学员通过案例指出OO是否真正做到了它所说的价值4.该设计保留到学习后,最后自己指出那些通过设计模式完善.=================================================================================设计模式应用策略2222—知道模式内容一:知道模式––––背会唐诗三百首1.指出什么是优秀设计和丑陋设计2.了解模式-需要知道自己不知道3.研读每种模式的关键4要素4.根据巴甫洛夫条件反射理论应用模式5.该阶段经常遇到的应用问题和对策内容二:设计目标,,,,原则与模式1.软件设计目标,基本原则和模式关系2.开闭原则和依赖导致原则3.里氏替换原则和合成/聚合复用原则4.接口隔离原则和Demeter法则5.通过案例进行分析内容三:模式案例––––XXXXXXXXXXXX电力系统1.介绍项目背景情况,如何应对将来的各种变化2.学员分组进行设计3.应用设计模式,如何改善设计4.分析设计模式是否带来软件的可维护性5.学习(FactoryMethod/Adapter等几种设计模式和设计原则)设计模式应用策略3333—贴身模仿内容一:研读经典系统––––平生不识陈近南,纵称英雄也枉然1.学习设计模式后,可是无法使用在真实项目的症状2.分析经典作品,重新思考设计模式的威力3.研读设计模式的关键要素内容二:模式案例––––2222位世界OOOOOOOO大师系统1.ErichGamma和KentBeck的Junit2.介绍Junit基本知识3.Junit架构思路(微内核模式)4.设计JUnit的过程中是怎样应用设计模式的。5.学习设计模式(Command/Composite/TemplateMethod/Adapter/Observer/Decorate)6.通过研读经典学习到什么?=================================================================================设计模式应用策略4444—应用模式场景预先设计内容一:用模式思考系统设计1.基于模式的设计系统2.用模式思考的过程3.模式的应用层次和组合应用模式4.基于模式的方法和步骤内容二:模式案例––––XXXXXXXXXXXX电信系统1.项目子系统背景和需求2.系统的设计思考过程3.展示如何用模式,进行设计4.学习设计模式(Command/Composite/TemplateMethod/Adapter/Observer/Decorate)设计模式应用策略5555—共性与可变性分析内容一:设计模式精髓封装变化————如何提高识别率1.设计模式精髓—如何应对变化2.封装变化的原则—变化不能散落多处和变化不能交织3.共性和可变性分析原理4.分析矩阵工具应用5.共性和可变性分析与设计模式思想内容二:模式案例––––XXXXXXXXXXXX金融系统1.介绍项目需求情况,进行设计2.展示需求变更对设计的影响3.通过重构逐步实现设计的可维护,可重用4.学习设计模式(Observer/Proxy/ChainofResponsibility/Façade/FactoryMethod)=================================================================================六、实验环境:该课程希望学员熟悉任一种面向对象编程语言(比如Java/C++/C#等)和UML基本知识.课堂上主要使用你的笔和纸来绘制UML类图和顺序图,不需要UML专门工具和编程环境.一个建模的好坏,不取决与工具,关键是使用工具的那个脑袋.七、强烈推荐书籍((((课前或课后建议学员深入阅读)))):DesignPatternExplained设计模式解析第2版AlanShallowway徐言声译AgileSoftwareDevelopPrinciples,Pattern,andPractice敏捷软件开发原则/模式/与实践RobertC.Martin邓辉译设计模式应用策略6666—重构到模式内容一:重构到模式----------------错了再改,,,,事不过三1.设计坏味道概述2.重构思想3.重构到设计模式(常见的不是真正OO症状)4.拙劣设计症状分析----低级篇5.拙劣设计症状分析----中级篇6.拙劣设计症状分析----高级篇7.代码静态检查工具的和持续集成8.常见设计模式的重构演化的过程内容二:案例----XXXXXXXXXXXX电信管理子系统的设计1.介绍项目需求情况,进行设计2.通过重构逐步实现设计模式3.Framework设计思想—好莱坞原则4.学习设计模式(FactoryMethod,TemplateMethod,Composite,ChainofResponsibility)设计模式应用策略7777—灵活运用内容一:模式案例----XXXXXXXXXXXXHRHRHRHR管理系统1.项目背景介绍和前期规划2.从最初的需求进行分析,到系统的设计,最后到编码实现该案例,全程进行面向对象的分析,建模,设计和最终的开发实现.3.通过案例学习(Command,ActiveObject,Strategy,Façade,Mediator,Singleton,NullObject模式)4.通过案例学习常见的错误设计5.通过案例学习怎样才能合适应用模式设计模式总结内容一:设计模式总结1.设计模式不是银弹2.设计模式真正给设计者带来的价值3.设计模式仅仅是工具4.超越设计模式