1 / 218
文档名称:

软件设计原则与设计模式.pptx

格式:pptx   大小:4,393KB   页数:218页
下载后只包含 1 个 PPTX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

软件设计原则与设计模式.pptx

上传人:胜利的果实 2022/8/10 文件大小:4.29 MB

下载得到文件列表

软件设计原则与设计模式.pptx

文档介绍

文档介绍:设计原则与设计模式
设计模式的思想根源是基本原则的宏观运用,本质上是没有任何模式的
发现模式的人永远是大师,而死守模式的人,最多只能是一个工匠.
2
设计模式 Design Pattern
设计模式 Design Patte:组合优先
如果使用继承来描述:
一旦增加新的汽车种类或用途,都需要大量改动原有代码
22
设计原则:组合优先
使用“组合”思路考虑问题
“汽车”拥有某种或某些“用途”
“汽车”和“用途”独立变化,互不影响
23
设计原则:组合优先
区分“Is-A”与“Has-A”
有一个系统需要描述经理、雇员和学生
它们都是人,所以:
24
设计原则:组合优先
问题
有些人既是经理,又是学生,比如某位在读MBA的老总
25
设计原则:组合优先
换一个角度看问题
雇员、经理、学生其实都是角色的一种
人拥有角色
26
Bridge(桥梁)模式
是什么导致设计的不完美?
变化,无法避免的、经常的需求变化
设计者的理想
当需求变化的时候,尽可能少的修改代码就可以满足新的需求
27
设计原则2:封装可变性
发现代码容易变化的部分,封装之,使它和不容易变化的部分独立开来
Bridge(桥梁)模式
“发现变化点”
28
Bridge(桥梁)模式
“封装变化点”
变化点1:小鸟一家
29
Bridge(桥梁)模式
“封装变化点”
变化点2:鸟类的行为——飞
30
Bridge(桥梁)模式
“封装变化点”
变化点2:鸟类的行为——游泳
31
Bridge(桥梁)模式
“使变化点和不变点独立开来”
在这个例子里其实是两个变化点相独立
“鸟类”和“行为”什么关系?
鸟类拥有行为
鸟类行为的具体实现,委托“行为”类来完成
32
鸟儿拥有飞、游泳的行为
33
Bridge(桥梁)模式
使用桥梁模式的效果
比如增加一种鸟类“鹅”,相应的要增加一种游泳的行为“红掌拨清波”
只需要增加一个鸟类的子类“鹅”
增加一个游泳的行为“红掌拨清波”
设置“鹅”的飞翔行为为“飞不起来”
设置“鹅”的游泳行为为“红掌拨清波”
原有代码不需要改动!
34
Bridge(桥梁)模式
35
Bridge(桥梁)模式
使用桥梁模式的效果
当需求改变的时候(增加动物或行为),只需要简单添加几个类
对原有代码不需要改动
保证了代码的稳定,提高了可维护性
36
设计原则3:开-闭原则
在设计一个软件的时候,应当使这个软件可以在不被修改的前提下扩展
Bridge(桥梁)模式
结构
37
Bridge(桥梁)模式
意图
将抽象部分与它的实现部分分离,使它们都可以独立地变化
适用性
抽象和它的实现部分可以独立变化
类的抽象以及它的实现都可以通过生成子类的方法加以扩充
实现部分的修改不会对客户产生影响
......
38
Bridge(桥梁)模式
应用举例1:“小朋友画画”
使用蜡笔
需要大中小三种型号
每种型号各有12种颜色
共36支
39
Bridge(桥梁)模式
使用毛笔:
大、中、小3支毛笔
12种颜料
40
Bridge(桥梁)模式
蜡笔和毛笔的差别
蜡笔:笔和颜色无法分离,因此需要36种蜡笔
毛笔:笔和颜色可以独立选择,因此只有3+12=15个子类
体现了Bridge模式
将继承关系转换为组合关系,从而降低了系统间的耦合,减少了代码冗余
41
Bridge(桥梁)模式
应用举例2
有一个CAD软件,可以画多种图形
同时支持多套绘图算法
传统的设计
42
Bridge(桥梁)模式
应用Bridge模式
43
Bridge(桥梁)模式
分析
图形Shape是一个抽象概念,它可以有许多具体化(变化点1)
图形的显示Drawing是图形的实现,它也可以有许多套算法(变化点2)
Bridge模式使用组合代替继承,避免了复杂的继承体系,使得两个变化点独立变化,互不影响
44
设计原则:开-闭原则、封装可变性
“开-闭”原则
Bertrand Meyer: “Software should be open for extension, but closed for modification”
在设计一个软件的时候,应当使这个软件可以在不被修改的前提下扩展
解释
已有模块,尤其是最重要的抽象层模块不能动:保证稳定性和延续性
可以扩展新模块:增加新行为,保证灵活性
45
设计原则:开-闭原则、封装可变性
Bertrand Meyer
对象技术大师
法国工程院院士
苏黎世工学院计算机系教授
发明了Eiffel语言和按契约设计(Design by Contract)的思想
早年参与了Z形式语言的设计
名著《面向对象软件构造》
4