您当前的位置:首页>课程>软件设计模式最佳实践

软件设计模式最佳实践

浏览:2732
分享

康凯 Read more

百林哲咨询(北京)有限公司专家团队成员

国内资深高级系统架构师,UML/RUP专家,现任国内某知名企业研究院首席架构师,软件设计师,15年的从事IT行业的软件开发、系统架构设计分析经验。

简介

本课程涵盖 面向对象设计原则、GRASP模式、GOF经典设计模式、其他经典的模式、架构模式5个方面,从面向对方出发,对重要的设计模式和软件设计原则进行了分析与讲解;以多个真实的项目为案例,深入讲解设计模式的运用;提供了大量的项目实例与代码,展现设计模式的结构。

IT公司,许多程序员学习设计模式和原则之后,往往是不知道如何使用模式,或者滥用模式(言必称模式),最终放弃不用模式,这是一个常见的三个阶段现象。最终导致设计模式思想远未被真正广泛应用,更未起到应有的作用,因而导致很多对设计模式的误解(学习设计模式无用论)。本课程针对学习设计模式的这3个经典错误问题进行了剖析。

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

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

此外,本课程对软件模块划分,及如何为模块划分职责进行了详尽的讲解及分析,揭示了软件设计原理及设计过程;帮助架构师掌握架构设计方法与架构设计的模式;本课还帮助设计人员掌握领域分析与建模的正确方法;帮助设计人员进行IT数据结构设计及实例等。

目标

帮助学员掌握软件设计原则、设计模式、设计方法,熟悉主流的软件设计模式

重点掌握软件设计模式在实际软件开发项目的实际应用

受众人群

软件设计师

开发团队中的设计人员、系统分析人员

开发、测试主管或项目经理,以及有望或有志成长为以上角色的技术人员。

课程时长

2天(12H)

分享提纲

课程主题

课程内容


第一单元 优秀系统与不佳系统的辨析——设计模式初探

内容一:什么是优秀的设计的设计

1. 什么是好的软件设计和衡量的手段

2. 可扩展性(Extensibility)容易添加新的功能. 结合案例,通过那些手段如何实现该目标

3. 灵活性(Flexibility)代码修改平稳地发生. 结合案例,通过那些手段如何实现该目标

4. 可插入性(Pluggability)容易将一个类抽出去,同时将另一个有同样接口的类加入进来. 结合案例,通过那些手段如何实现该目标

5. 如何写出简练,易于理解,模块化,层次性,设计良好,高效,优雅,并且清晰的系统。

6. 劣质代码有什么特征

7. 劣质代码的代价

8. 设计模式在构建优秀系统及避免不佳设计中的用途。

9. 分析真实项目,如何做的详细设计,给我们哪些启示,我们可以学习到什么

10. 分析我们在项目之中是那些原因导致了没有实现这些目标.

内容二:案例

11. 某档案移交接收系统:纷繁复杂的嵌套判断

12. 某多媒体制作软件:上传-下载模块

13. 案例涉及,需要详细学习如下设计模式及原则:

14. 简单工厂、单例、策略模式

15. 重点:如何组织自己的代码和模块:指令与查询分离原则。

16. 对有多年编程经验的人员,函数级的编码是小儿科?

17. 分析模式使用前和后的对比

第二单元 设计模式与面向对象设计原则

内容一:面向对象设计原则与设计模式关系

1. 软件设计目标,基本原则和模式关系

2. 开闭原则

3. 依赖倒置原则

4. 单一职责原则

5. 里氏替换原则

6. 合成/聚合复用原则

7. 接口隔离原则和Demeter法则

8. 通过案例进行分析,模式如何使用

内容二:案例分析—OO基本原则与设计模式

1. 通过经典面向对象案例,要求学员分别使用过程式和面向对象2种思维,进行设计

2. 进行对比2种思维的不同点和结果

3. 学员通过案例指出OO是否真正做到了它所说的价值

4. 这些小案例涉及项目开发中的常见的困境、疑惑,本节探讨如何通过设计原则解决。

5. 讨论设计原则与设计模式的关系,已经在没有合适模式可用的情况下如何分析、解决问题。涉及如下模式:

a) Façade

b) 观察者模式与表驱动法

c) Bridge模式

d) Template Method模式

e) Strategy模式

第三单元  系统/模块中的接口设计,及对外暴露服务技巧——组织接口型模式

内容一:内存接口及Web接口的设计及讨论

1. 接口分离原则

2. 面向对象的要点

3. 系统交互时,松散耦合的设计要点

4. 无状态在接口设计中的重要性,及设计实践

5. 接口的粒度

6. 接口调用次数与粒度的折中

7. 接口版本的设计

8. 新旧接口的兼容性设计技巧——只增不改、灵活参数等

内容二:组织接口型模式

1. 适配器模式。Adapter

a) 适配器模式介绍。

b) 容易被忽略的情况:关于接口的修改。

c) 适配器总结。

例:文件解析器系统的接口设计。

2. 外观模式。

a) 令人望而生畏的API函数。

b) 外观模式的作用。

c) 容易被忽略的外观。

d) 外观模式与适配器的辨析。

例:文件解析器系统的外观设计。

3. 中介者模式

a) 中介者模式的使用场景。

b) 中介者模式在架构中的重要地位。

c) 中介者模式与控制者。

第四单元 如何在系统及框架中创建并管理对象/模块? ——创建型模式

内容一:对象及模块创建的管理

1. 对象创建与IOC模式

2. 框架设计中的对象管理——SpringBean分析

3. 在分层架构中,对象创建的要点

内容二:创建型模式

1. 单例模式。

a) 单例模式的意义。

b) 多线程中的问题。

例:引入单例模式。

2. 工厂模式

a) 工厂模式的使用场景。

b) 工厂模式与反射。

例:引入工厂模式。

3. 抽象工厂模式

a) 创建不同对象的多个系列产品。

b) 工厂模式与抽象工厂模式的区别。

例:引入抽象工厂模式。

4. 构造者模式

a) 构造者模式的应用场景。

b) 构造者模式中的控制者。

5. 原型模式

a) 作为工厂的原型

b) 利用克隆进行原型

第五单元 如何设计出高可扩展性的系统!——扩展型模式

内容一:如何应对需求的变化 —— 打造高可扩展性的系统!

1. 从技术的角度,如何应对需求的变化?

2. 高可扩展性系统的特点及达成方式的变迁

3. 框架设计的常用方法

4. 如何平衡精巧系统的设计和开发成本的投入?

5. 不要生硬地套用模式 —— 桥接模式的灵活使用

内容二:扩展型模式

6. 功能与逻辑的关系

a) 功能模块的设计要点。

b) 逻辑模块的设计要点。

c) 系统稳定及可扩展的秘诀。

7. 模板方法模式

a) 部分的多态。

b) 模板方法模式的使用场合。

c) 模板方法模式与IOC。

例:文件解析器中的模板方法模式。

8. 策略模式

a) 继承与组合的辨析。

b) 多态的经典使用。

c) 无处不在的策略模式。

例:运输系统;在多窗口系统中引入策略模式。

9. 桥接模式

a) 从“类爆炸”说起。

b) 复杂多对多的处理。

c) 仅针对接口编程是不够的。

d) 桥接模式的要点:抽象类行为的具体实现中有重复的方法。

e) 从桥接模式到面向对象的误区。

例:在文件解析器中引入桥接模式。

10. 状态模式

a) 状态模式的本质:类状态机。

b) 状态模式的前提条件:经常发生改变的是状态(业务流程),而非对应的处理。

c) 状态模式使用。

d) 状态模式与表驱动法。

e) 策略、桥接、状态、模板方法模式的辨析。

11. 装饰模式

a) 装饰模式的使用场合。

b) 装饰模式的要点。

c) Java中的装饰模式。

例:装饰模式在打印中的使用。

12. 代理模式

a) 代理模式的使用场合。

b) 代理模式的要点。

c) 代理模式与AOP

13. 访问者模式

a) 访问者模式的使用场合。

b) 双重分发机制。

c) 与桥接模式的比较。

例:在演示控制系统中引入桥接模式。

14. 责任链模式

a) 责任链模式的使用场合。

b) 责任链模式的要点。

c) 消息路由与责任链模式。

15. 组合模式

a) 组合模式的使用场合。

b) 组合模式的使用要点。

c) 例:组合模式在表单统计中的使用。

第六单元 系统流程控制的设计——操作型模式

内容一:系统中流程控制的设计

1. 类名暗含的意味

2. 临时创建对象的用途

3. 工作流与命令模式

4. 消费者-生产者模式

5. 消息广播的多种实现形态

内容二:操作型模式

6. 命令模式

1) 命令模式的特点、优点及缺点。

2) 命令模式的典型使用场合。

例:在客户端与服务器端传递命令。
例:在元搜索系统中使用命令模式。

7. 观察者模式

1) 观察者模式的使用场景。

2) 观察者模式与MVC。

3) 观察者模式使用中变体。

例:用观察者模式解决多窗口系统的联动问题。

8. 享元模式

1) 享元模式的使用场景。

2) 内存管理:存根(stub)与享元模式。

9. 备忘录模式

1) 备忘录的使用场景。

10. 迭代器模式

1) Java、stl、c#中的迭代器实例。

例:构造统一的树状结构迭代。

11. 解析器模式:

1) 解析器模式的使用场合。

第七单元 如何才能正确使用模式

内容一:设计模式的精髓——封装变化

1. 设计模式精髓—如何应对变化

2. 封装变化的原则——避免“散弹枪式的外科手术”

3. 如何抽取出系统中的变化点及不变点

4. 不同因素的隔离——保护变量原则

5. 设计模式中封装变化的思想和具体手段探讨

内容二:模式案例–某订单系统

1. 介绍项目需求情况,进行设计

2. 学习设计模式(Strategy / Abstrct Factory/ Template Method)

内容三:模式案例–某数据展示系统

1. 项目子系统背景和需求

2. 系统的设计思考过程

3. 展示如何用模式,进行设计

4. 学习设计模式(Strategy /Command/Template Method/ NULL Objecct /Adapter/表驱动法/Singleton )

内容四:模式案例–某数据分析系统

1. 项目子系统背景和需求

2. 系统的设计思考过程

3. 展示如何用模式,进行设计

4. 学习设计模式(Observer / Visitor/ Composite /Command/ Strategy /Adapter/Singleton )

第八单元 重构到模式

内容一:重构到模式----错了再改,事不过三

1. 设计坏味道概述

2. 重构思想

3. 重构到设计模式

4. 常见设计模式的重构演化的过程

内容二:案例- 网络数据分析系统的设计

1. 介绍项目需求情况,进行设计

2. 通过重构逐步实现设计模式

3. Framework 设计思想—好莱坞原则

4. 学习设计模式

5. Factory模式

6. Strategy模式

7. Decorator模式

8. Observer模式

9. 架构模式-分层、管道过滤器模式

10. 架构模式的重构及演变,每步的依据及效果对比

11. 从结构上考虑、从效率上考虑


我要参加

可同时提交您的需求,我们会及时与您联系

预约内训

将课程带入到您的团队,为您的团队进行一对一辅导。

相关课程