软件设计精解与模式案例分(fēn)析

软件设计精解与模式案例分(fēn)析
    马上咨询

    刘捷  曾任BEA中國(guó)专业服務(wù)部 高级架构师顾问  

    现任职Oracle架构咨询顾问,帮企业诊断架构性能(néng)问题,曾任职BEA(中國(guó))资深软件架构师,十余年的企业软件架构、开发和管理(lǐ)经验,侧重于企业应用(yòng)软件架构设计.主要负责客户大型项目的架构设计和研发,作為(wèi)技术专家保证项目的成功实施,运行和维护。参加过全國(guó)/全省多(duō)个大型的计算机应用(yòng)项目,擅長(cháng)的领域包括電(diàn)信,金融、税務(wù),大型互联网web2.0应用(yòng)等。此前就职于IBM,任软件架构师。 在此之前曾任日本东京一家软件企业的资深技术顾问。

    课程介绍

    2010年是<设计模式>一书出版15周年. 如今,对于很(hěn)多(duō)人来说,设计模式已经成為(wèi)开发标准词典的一部分(fēn).15年来,设计模式思想影响了整整一代软件从业者.而且可(kě)以预料,它的影响还将继续下去.可(kě)是目前國(guó)内的大部分(fēn)程序员學(xué)习设计模式和原则之后,往往是不知道如何使用(yòng)模式,或者滥用(yòng)模式(言必称模式),最终放弃不用(yòng)模式,这样三个阶段,最终导致设计模式思想还遠(yuǎn)没有(yǒu)真正广泛应用(yòng),更没有(yǒu)起到应有(yǒu)的作用(yòng),因而导致很(hěn)多(duō)对设计模式的误解(學(xué)习设计模式无用(yòng)论).该课程就是针对學(xué)习设计模式这3个经典错误问题而开设的.

    作為(wèi)為(wèi)一门高级课程,若内容缺乏实務(wù)便易流于抽象与空泛。本课程除了深入剖析各种典型的设计模式之原理(lǐ)与结构外, 同时会抽取大量知名程序库中的设计模式,利用(yòng)其源码辅助并加强原理(lǐ)讲解。并且结合讲师大量实际项目案例进行分(fēn)析. 这种方式对于设计模式的學(xué)习有(yǒu)着极大效果。 与其它的仍然沿用(yòng)传统模式目录方式逐一讲述每一模式的意图,结构,适应性等的培训和图书完全不同.

    课程1/3的时间介绍设计模式思想和原理(lǐ),1/3时间案例,并且要求學(xué)员组合成小(xiǎo)组进行现场设计. 最后1/3时间再介绍该案例的设计过程,讲师带领大家一起对设计结果进行分(fēn)析,指出不”和谐”的地方,通过逐步运用(yòng)模式,改善设计. 而不是把最完美的答(dá)案一下子放到學(xué)员的面前,让你佩服.并且分(fēn)析為(wèi)什么使用(yòng)模式,而不是过度设计,為(wèi)什么又(yòu)要放弃模式. 因為(wèi)了解优秀软件设计的演变过程比學(xué)习优秀设计本身更有(yǒu)价值,因為(wèi)设计的演变过程之中蕴藏着大智慧.培训时根据实际情况,可(kě)以安排學(xué)员自己的项目代码或者设计作為(wèi)课程案例进行分(fēn)析和设计.

    培训对象

    该课程适合各类 IT/软件企业和研发机构的软件架构师、软件设计师、程序员。特别能(néng)够带着设计模式实践时的困惑和问题,效果最佳. 到时可(kě)以与讲师PK讨论,这样对你帮助会更大,收获也会更多(duō).本课程不是设计模式入门级别课程, 不会目录式介绍每一模式的详细细节, 因此需要學(xué)员课前做好相关准备,最好已经具备模式概念和常见模式的基本知识.最好课前可(kě)以简单预习

    培训特色

    本课程注重实战,不尚空谈.讲师根据本人的學(xué)习过程和经验来介绍如何解决这些问题. 课程不仅仅介绍经典的GOF设计模式,而且涉及常见的其它模式和软件架构模式.该课程首次提出了解决设计模式如何应用(yòng)的5个步骤。5个步骤针对应用(yòng)设计模式的不同错误症状,解决如何应用(yòng)模式.知道模式是什么和真正理(lǐ)解什么时候去应用(yòng)模式,就完全是不同的境界.以上步骤,都借助于真实项目案例(不是简单的演示之类的Demo,而是真实的系统),展示如何在实际开发之中正确的选择和运用(yòng)模式,在这些案例之中,在设计时应用(yòng)模式能(néng)看到实实在在的效果(每个案例,均有(yǒu)PK使用(yòng)之前和使用(yòng)之后对比).

    學(xué)员基础

    由于本次课程重点设计模式如何应用(yòng),不会过多(duō)时间學(xué)习设计模式基本概念/结构/意图等, 因此需要學(xué)员课前做好相关准备,以节约课程案例的思考时间.以下原则和模式最好预先了解   

    6个大型项目案例涉及软件原则和模式

    面向对象设计原则
    单一职责原则 (SRP)   变化分(fēn)离
    “开-闭”原则(OCP)对可(kě)变性封装
    里氏替换原则(LSP)    如何进行继承
    接口隔离原则(ISP)恰当的划分(fēn)角色和接口
    依赖倒转原则(DIP)针对接口编程
    GOF设计模式
    Singleton模式/Builder模式/Simple Factory模式
    Factory Method模式/ Strategy/Observer/Chain of Responsibility/Command/Template   Method/Adapter/Proxy/Façade/Bridge/Decorator/Composite/Visitor
    课程案例主要涉及15GOF常用(yòng)设计模式,也重点學(xué)习这些模式
    C嵌入式编程设计模式
    基本的嵌入式设计模式/硬件代理(lǐ)模式/硬件适配器模式/中介者模式/观察者模式/去抖动模式/中断模式
    其它设计模式
    Object Pool模式/Dependency Injection依赖注入/Null Object模式/Plug-In模式/Active Object模式/Abstract Server模式
    虽然不属于GOF,但是经常在软件设计时使用(yòng).案例也涉及
    架构模式
    Pipe Filter架构模式/Layer架构模式/Microkernel Pattern/MVC/
    案例涉及这些架构模式,在高层设计

    培训大纲

    设计模式思想与困惑---你的了解设计模式吗?
    内容一:软件设计模式---模式到底是什么?价值在哪里?
    1. 什么是模式
    2. 為(wèi)什么需要设计模式? 难道就為(wèi)了面试吗?
    3. 设计模式能(néng)够给我们带来什么?
    4. 设计模式學(xué)习面临的困难和解决思路
    5. 从了解模式到正确应用(yòng)模式
    1. 案例分(fēn)析---某電(diàn)信业務(wù)系统,在使用(yòng)模式前解决方案使用(yòng)模式后的对比
    内容二:软件设计模式本质你真的知道模式背后的原理(lǐ)吗?
    1. 发现变化进行封装变化
    2. 把变化与不变必须分(fēn)离
    3. 针对接口的编程,而不是针对实现
    4. 组合优于继承
    1. 案例分(fēn)析—某電(diàn)信认证项目设计分(fēn)析,分(fēn)析模式背后的本质
    内容三:什么是好的设计-----难道使用(yòng)设计模式就是好的设计吗?
    1. 什么是好的设计?
    2. 难道不使用(yòng)设计模式就是坏的设计吗?
    3. 為(wèi)什么需求变化总是使你痛苦? 和你的设计有(yǒu)关系吗?
    4. 好的系统设计应该有(yǒu)如下的性质:可(kě)扩展性、灵活性、可(kě)插入性。
    5. 设计模式可(kě)以使你的设计更灵活,更易复用(yòng),更具可(kě)扩展性
    1. 案例分(fēn)析—某電(diàn)信项目4种设计方案的对比, 那种更合适?多(duō)种方案的对比
    设计模式应用(yòng)策略1—面向对象思维
    内容一:面向对象思维是模式基础
    1. 面向对象分(fēn)析与设计的本质
    2. 面向对象设计思维与面向过程设计思维—职责驱动设计
    3. 抽象本质
    4. 封装本质
    5. 继承本质
    6. 多(duō)态本质
    7. 面向对象常见的错误认识—思考OO带来的价值
    8. 為(wèi)什么學(xué)习设计模式需要面向对象思维
    9. 从面向对象到模式到再到真正的面向对象
    10.   案例分(fēn)析ERP项目,   使用(yòng)面向对象设计和过程化设计 PK,,难道面向对象就一定是最优的?   你真正理(lǐ)解面向对象吗面向对象到底真正有(yǒu)哪些好处,   不要人云亦云 !
    内容二:面向对象设计原则(principles
    1. 依赖倒置原则(DIP)
    2. 开放封闭原则(OCP)
    3. 单一职责原则(SRP)
    4. Liskov   替换原则(LSP)
    5. 接口隔离原则(ISP)
    6. 案例分(fēn)析每组原则,分(fēn)别通过案例进行分(fēn)析,為(wèi)什么需要使用(yòng)原则进行考虑

    GOF23设计模式是建立在对面向对象技术深刻理(lǐ)解的基础之上的,本节深入讲解面向对象设计,几大经典的面向对象设计原则,OO对象模型,从各个角度奠定學(xué)习设计模式之核心基础
    设计模式应用(yòng)策略2—嵌入式C语言如何使用(yòng)设计模式
    通过将面向对象程序设计技术与C语言相结合,以提升C语言的简洁性、易读性和重复使用(yòng)性,进而提升嵌入式系统分(fēn)析及架构设计的技术能(néng)力。
    内容一:OO思想与标准C语言应用(yòng)
    1. 了解模式-需要知道自己不知道
    2. C程序的基本组成
    3. C语言的数据类型
    4. C的数据运算
    5. 结构(struct)及动态内存分(fēn)配
    6. 外部变量与静态函数
    7. 认识对象(Object)
    8. 对象沟通方法
    9. 对象沟通实例
    10. 认识接口(Interface)
    11. 接口应用(yòng)实例
    12. 案例分(fēn)析演示C语言如何实现OO代码
    内容二:嵌入式C语言应用(yòng)设计模式
    1. 面向对象的视角,重新(xīn)审视嵌入式系统,全面总结了嵌入式系统中常见的以及关键的设计模式
    2. 嵌入式C语言应用(yòng)设计模式的不同
    3. 以下以嵌入式项目為(wèi)案例分(fēn)析,应用(yòng)设计模式
    4. 硬件代理(lǐ)模式
    5. 硬件适配器模式
    6. 中介者模式
    7. 观察者模式
    8. 去抖动模式
    9.   中断模式
    13. 案例分(fēn)析演示C语言如何应用(yòng)设计模式

    本节深入阐述GOF 23种经典设计模式(包括创建型模式、结构型模式、行為(wèi)型模式),深入解析它们的意图、动因、原理(lǐ)、实现与应用(yòng)实践。
    设计模式应用(yòng)策略3—设计模式基础
    A、创建型模式
    i.   Singleton模式
    ii.   Builder模式
    iii.   Simple Factory模式
    iv.   Factory Method模式
    B、行為(wèi)型模式
    i.   Template Method
    ii.   Strategy
    iii. State
    iv. Observer
    v.   Chain of Responsibility
    vi.   Command
    vii. Iterator
    C、结构型模式
    i.   Adapter
    ii.   Bridge
    iii. Facade
    iv. Composite
    v.   Decorator
    vi. Proxy
    设计模式应用(yòng)策略4—临摹大师
    看看那帮牛的大师他(tā)们怎样使用(yòng)设计模式的 ,他(tā)们也是在滥用(yòng)设计模式吗?
    内容一:研读经典系统學(xué)习那些大牛如何使用(yòng)设计模式
    1. 學(xué)习设计模式后,可(kě)是无法使用(yòng)在真实项目的症状
    2. 分(fēn)析经典作品,重新(xīn)思考设计模式的威力
    3. 研读设计模式的关键要素
    内容二:模式案例–Junit设计模式应用(yòng)分(fēn)析
    1. Erich   Gamma 和Kent Beck 的Junit
    2. Junit架构思路(微内核模式)
    3. Juint的设计, 哪些值得我们學(xué)习
    4. 设计JUnit的过程中是怎样应用(yòng)设计模式的。
    5. 學(xué)习设计模式(Command/Composite/Template Method/   Adapter/Observer/Decorate )
    6. 通过研读经典學(xué)习到什么?
    设计模式应用(yòng)策略5你知道如何用(yòng)模式去思考吗
    有(yǒu)时放弃模式更值得學(xué)习
    内容一:用(yòng)模式思考系统设计
    1.   基于模式的设计系统
    2.   用(yòng)模式思考的过程
    3.   模式的应用(yòng)层次和组合应用(yòng)模式
    4.   基于模式的方法和步骤
    内容三:模式案例–XXXX缓存系统
    1.   项目系统背景和需求
    2.   缓存任何对象,任何java对象都可(kě)以缓存。
    3.   拥有(yǒu)全面的API--给你全面的程序来控制所有(yǒu)的缓存的特性。
    4.   永久缓存--缓存能(néng)随意的写入硬盘,因此允许昂贵的创建(expensive-to-create)数据来保持缓存,甚至能(néng)让应用(yòng)重启。
    5.   支持集群--集群缓存数据能(néng)被单个的进行参数配置,不需要修改代码。
    6.   缓存记录的过期--你可(kě)以有(yǒu)最大限度的控制缓存对象的过期,包括可(kě)插入式的刷新(xīn)策略(如果默认性能(néng)不需要时)。
    7.   系统的设计思考过程
    8.   展示如何用(yòng)模式,进行设计
    9.   學(xué)习设计模式()
    设计模式应用(yòng)策略6—重构到模式
    通过重构实现模式改善既有(yǒu)的设计,往往优于在新(xīn)的设计早期使用(yòng)模式。
    内容一:重构到模式-   
    1. 设计坏味道概述
    2. 重构思想
    3. 理(lǐ)解如何结合重构和模式;
    4. 用(yòng)模式导向的重构(pattern-directed refactoring)改善既有(yǒu)代码的设计;
    5. 找出需要进行模式导向重构的代码段;
    6. 了解為(wèi)什么使用(yòng)模式来改善既有(yǒu)的设计要优于在新(xīn)的设计早期使用(yòng)模式。
    7. 一组坏味(也就是问题),表示需要进行模式导向的重构;
    8.   实现同一模式的不同方式的示例;
    9.   什么时候应该通过重构实现模式、趋向模式以及去除模式给出建议。
    10. 常见设计模式的重构演化的过程
    7.   案例分(fēn)析通过一个大型電(diàn)信系统案例分(fēn)析,解决如何通过重构引入设计模式
    内容二:案例遗留系统如何使用(yòng)设计模式
    1.   拒绝退化—“首先不要伤害”
    2.   关注点分(fēn)离
    3.   通过案例分(fēn)析,如何修改遗留代码,而不破坏现有(yǒu)系统代码结构,引入设计模式
    8.   案例分(fēn)析通过一个系统案例分(fēn)析,如何在维护遗留系统时,通过分(fēn)离制作,关注点分(fēn)离,实现对遗留系统不伤害,从而引入设计模式
    内容三:案例某電(diàn)信管理(lǐ)子系统的设计
    4.   介绍项目需求情况,进行设计
    5.   通过重构逐步实现设计模式
    6.   Framework   设计思想—好莱坞原则
    7.   學(xué)习设计模式(Factory Method, Template Method,   Composite, Chain of Responsibility )

    “虽然软件的演化,利用(yòng)重构从而得到模式”是有(yǒu)效应用(yòng)设计模式的实践准则。本节以一些重构技巧来展示如何通过演化的方式来步步达至设计模式,从而帮助學(xué)员更好地掌握如何在软件设计中运用(yòng)设计模式,发现更多(duō)设计模式。
    设计模式应用(yòng)策略7---设计模式对比大讨论
    内容一:模式大PK,   通过对比了解设计模式的细节
    1.   创建型模式讨论
    a)   简单工场   工厂方法   抽象工场
    b)   Abstract   Factory,builder,Prototype 模式
    c)   单例模式
    2.   行為(wèi)型模式
    a) Adapter与Bridge
    b) Composite、Decorator与Proxy
    c)   Façade模式与 Adapter模式 /Proxy模式
    d)   Composite   与Iterator模式
    3.   结构型模式
    a) 封装变化-Strategy/State/Iterator模式
    b) 封装结构---Mediator模式与Facade模式
    c) 对象作為(wèi)参数--Visitor/Command/Mementor
    d) 通信应该被封装还是被分(fēn)布-Mediator和Observer
    e)   对发送者和接收者解耦-Command模式与职责链模式
    将实践中常容易混淆或常常联合使用(yòng)的几个模式放在一组讨论,对比分(fēn)析,讲解思想。如何发现、应用(yòng)更多(duō)模式。通过对“相似或相关的设计模式”的对比分(fēn)析,加深理(lǐ)解,是避免“模式误用(yòng)”的好方法。
    设计模式应用(yòng)策略8- 综合应用(yòng)分(fēn)析
    内容一:大型系统的设计案例分(fēn)析,介绍如何预先应用(yòng)模式,以及如何在第3版本重构时导入模式,已经在后期维护时应用(yòng)模式
    1.   ××某省移动線(xiàn)路资源维护系统的背景介绍
    2.   系统需求分(fēn)析
    3.   如何根据应用(yòng)系统特点,和变化与不变等原因,引入模式
    4.   根据应用(yòng)功能(néng),导入设计模式
    5.   第1版本上線(xiàn)时的系统设计分(fēn)析
    6.   第1版本,系统设计时遗留的问题,设计不足,缺陷等分(fēn)析
    7.   第2版本,由于增加新(xīn)功能(néng)导致的严重问题分(fēn)析
    8.   系统出现很(hěn)多(duō)设计不足
    9.   第3版本,由于增加新(xīn)功能(néng)导致的严重问题分(fēn)析
    10. 系统开始引入重构,系统的坏味道,以及重构,分(fēn)析在重构是如何使用(yòng)重构
    11. 分(fēn)析第4版本的系统设计
    12. 系统在后续维护过程之中的,设计情况。以及如何在维护时期进行应用(yòng)模式
    设计模式应用(yòng)策略9-设计模式总结
    内容一:设计模式总结
    13. 设计模式不是银弹
    14. 设计模式真正给设计者带来的价值
    15. 设计模式仅仅是工具
    16. 超越设计模式