1 软件设计原则和设计模式概览
1.1 面向对象设计原则
单一职责原则(SRP) 变化分离
开闭原则(OCP) 对可变性封装
里氏替换原则(LSP) 如何进行集成
接口隔离原则(ISP) 恰当地划分角色和接口
依赖倒转原则(DIP) 针对接口编程
1.2 GOF设计模式
1.3 C嵌入式编程设计模式
基本的嵌入式设计模式
硬件代理模式
硬件适配器模式
中介者模式
观察者模式
去抖动模式
中断模式
1.4 其他设计模式
Object Pool模式
Dependency Injection依赖注入
Null Object模式
Plug-In模式
Active-Object模式
Abstract Server模式
1.5 架构模式
Pipe Filter架构模式
Layer架构模式
Microkernel Pattern
MVC
2 设计模式思想与困惑——你了解设计模式吗?
2.1 软件设计模式——模式到底是什么?价值在哪里?
1.什么是模式
2.为什么需要设计模式?
3.设计模式能够给我们带来什么
4.设计模式学习面临的困难和解决思路
5.从了解模式到正确应用模式
6.案例分析——某电信业务系统,在使用模式前的解决方法 和 使用模式后的 对比
2.2 软件设计模式本质——你真的知道模式背后的原理吗?
1.发现变化并封装变化
2.把变化与不变分离
3.针对接口编程,而不是针对实现
4.组合优于继承
5.案例分析——某电信认证项目设计分析,分析模式背后的本领
2.3 什么是好的设计——难道使用设计模式就是好的设计吗?
1.什么是好的设计?
2.难道不使用设计模式就是坏的设计吗?
3.为什么需求变化总是使你痛苦?和你的设计有关系?
4.好的系统设计应该有如下的性质:可扩展性、灵活性、可插入性
5.设计模式可以使你的设计更灵活,更易复用,更具可扩展性
6.案例分析——某电信项目4种设计方案的对比
3 设计模式应用策略1——面向对象思维
3.1 面向对象思维是模式基础
1.面向对象分析与设计的本质
2.面向对象设计思维与面向过程设计思维——职责驱动设计
3.抽象本质
4.封装本质
5.继承本质
6.多态本质
7.面向对象常见的错误认识——思考OO带来的价值
8.为什么学习设计模式需要面向对象思维
9.从面向对象到模式再到真正的面向对象
10案例分析——某ERP项目,使用面向对象设计和过程设计的PK,难道面向对象就一定是最优的?你真正理解面向对象吗?面向对象到底真正有哪些好处,不要人云亦云!
3.2 面向对象设计原则(principles)
SOLID
单一职责原则(SRP) 变化分离
开闭原则(OCP) 对可变性封装
里氏替换原则(LSP) 如何进行集成
接口隔离原则(ISP) 恰当地划分角色和接口
依赖倒转原则(DIP) 针对接口编程
4 设计模式应用策略2——嵌入式C语言如何使用设计模式
通过将面向对象技术与C语言结合,以提升C语言的简洁性、易读性和重复使用性,进而提升嵌入式系统分析及架构设计的技术能力
4.1 OO思想与标准C语言应用
1.了解模式——需要知道自己不知道
2.C程序的基本组成
3.数据类型
4.数据运算
5.结构及动态内存分配
6.外部变量与静态函数
7.认识对象(Object)
8.对象沟通方法
9.对象沟通实例
10.认识接口(Interface)
11.接口应用实例
12.案例分析——演示C语言如何实现OO代码
4.2 嵌入式C语言应用设计模式
1.面向对象的视角,重新审视嵌入式系统,全面总结了嵌入式系统中常见的以及关键的设计模式
2.嵌入式C语言应用设计模式的不同
3.以下以嵌入式项目为案例分析,应用设计模式
4.硬件代码模式
5.硬件适配器模式
6.中介者模式
7.观察者模式
8.去抖动模式
9.中断模式
10.案例分析——演示C语言如何应用设计模式
5 设计模式应用策略3——临摹大师
看看大师怎样使用设计模式,他们也是在滥用设计模式吗?
5.1 研读经典系统——学习那些大牛如何使用设计模式
1.学习设计模式后,可是无法使用在真实项目的症状
2.分析经典作品,重新思考设计模式的威力
3.研读设计模式的关键要素
5.2 模式案例——JUnit设计模式应用分析
1.Erich Gamma和Kent Beck的JUnit
2.JUnit架构思路(微内核模式)
3.JUnit的设计,哪些值得我们学习
4.设计JUnit的过程中是怎样应用设计模式的
5.学习设计模式
6.通过研读经典学习到什么
6 设计模式应用策略4——你如何用模式去思考
有时放弃模式更值得学习
6.1 用模式思考系统设计
1.基于模式的设计系统
2.用模式思考的过程
3.模式的应用层次和组合应用模式
4.基于模式的方法和步骤
6.2 模式案例——缓存系统
1.项目系统背景和需求
2.缓存任何对象,任何java对象都可以缓存
3.拥有全面的API-给你全面的程序来控制所有的缓存的特性
4.永久缓存——缓存能随意地写入硬盘,因此允许昂贵的创建数据来保持缓存,甚至能让应用重启
5.支持集群——集群缓存数据能被单个的进行参数配置,不需要修改代码
6.缓存记录的过期——你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性能不需要时)
7.系统的设计思考过程
8.展示如何用模式进行设计
9.学习设计模式
7 设计模式应用策略5——重构到模式
7.1 重构到模式
1.设计坏味道概述
2.重构思想
3.理解如何结合重构和模式
4.用模式导向的重构(pattern-directed refactoring)改善基友代码设计
5.找出需要进行模式导向重构的代码段
6.了解为什么使用模式来改善既有的设计要优于在新的设计早期使用模式
7.一组坏味道,表示需要进行模式导向的重构
8.实现同一模式的不同方式的示例
9.什么时候应该通过重构实现模式、趋向模式以及去除模式给出的建议
10.常见设计模式的重构演化过程
11.案例分析——通过一个大型电信系统案例分析,如何通过重构引入设计模式
7.2 案例——遗留系统如何使用设计模式
1.拒绝退化——首先不要伤害
2.关注点分离
3.通过案例分析,如何修改遗留代码,而不破坏现有系统代码结构,引入设计模式
4.案例分析——通过一个系统案例分析,如何在维护遗留系统时,通过分离制作,关注点分离,实现对遗留系统不伤害,从而引入设计模式
8 设计模式应用策略6——设计模式对比大讨论
1.创建型模式讨论
1)简单工厂 工厂方法 抽象工厂
2)Abstract Factory, Builder, Prototype
3)单例模式
2.行为型模式
1)Adapter, Bridge
2)Composite, Decorator, Proxy
3)Façade, Adapter, Proxy
4)Composite, Iterator
3.结构性模式
1)封装变化——Strategy/Iterator
2)封装结构——Mediator与Façade
3)对象作为参数——Visitor/Command/Mementor
4)通信应该被封装还是被分布——Mediator/Observer
5)对发送者和接收者解耦——Command模式与职责链模式
将实践中常容易混淆或常常联合使用的几个模式放在一组讨论,对比分析,讲解思想。如何发现、应用更多模式。通过对“相似或相关的设计模式”的对比分析,加深理解,是避免“模式误用”的好方法
9 设计模式应用策略7——综合应用分析
大型系统的设计案例分析,介绍如何预先应用模式,以及如何在第3版本重构时导入模式,以及在后期维护时应用模式
1.某省移动线路资源维护系统的背景介绍
2.系统需求分析
3.如何根据应用系统特点,和变化与不变等原因,引入模式
4.根据应用功能,导入设计模式
5.第1版本上线时的系统设计分析
6.第1版本,系统设计时遗留的问题,设计不足,缺陷等分析
7.第2版本,由于增加新功能导致的严重问题分析
8.系统出现很多设计不足
9.第3版本,由于增加新功能导致的严重问题分析
10.系统开始引入重构,系统的坏味道,以及重构,分析在重构时是如何使用重构
11.分析第4版本的系统设计
12.系统在后续维护过程之中,设计情况,以及如何在维护时期应用模式
10 设计模式应用策略8——设计模式总结
1.设计模式不是银弹
2.设计模式真正给设计者带来的价值
3.设计模式仅仅是工具
4.超越设计模式