17软件工程《软件构造》第5周安排
一、教学安排
自学第10章的内容 149-167页
讲授第11章的内容168-183页
导学视频资料在砺儒云课堂:
https://moodle.scnu.edu.cn/course/view.php?id=9522
实验作业在学者网课程平台:
http://www.scholat.com/course/rjgz
二、重点难点
1、理解适配器模式的技术要点
2、对比类适配器和对象适配器的优缺点
3、掌握桥接模式的适用场景
4、理解面向对象的合成复用原则及其编程技巧
5、理解关联与继承的关系
大家可以根据自己的情况进行相应的预习
三、课前思考
小明所在的软件公司欲开发一个跨平台图像浏览系统,要求该系统能够显示BMP、JPG、GIF、PNG等多种格式的文件,并且能够在Windows、Linux、Unix等多个操作系统上运行。系统需具有较好的扩展性以支持新的文件格式和操作系统。
他们的初步方案是多层继承结构,如下图:
通过对初步方案进行分析,发现了下列问题:
(1) 类的个数急剧增加
由于采用了多层继承结构,具体层的类的个数 = 所支持的图像文件格式数×所支持的操作系统数 (12=4*3)。
(2) 系统扩展性不好
由于每一个具体类既包含图像文件格式信息,又包含操作系统信息,因此无论是增加新的图像文件格式还是增加新的操作系统,都需要增加大量的具体类。
思考1:有没有更好的设计方案?
思考2:如果系统中存在两个以上的变化维度,是否可以使用桥接模式进行处理?
四、师说
桥接模式是一个非常有用的模式,在桥接模式中体现了很多面向对象设计原则的思想,包括“单一职责原则”、“开闭原则”、“合成复用原则”、“里氏代换原则”、“依赖倒转原则”。熟悉桥接模式有助于我们深入理解这些设计原则,也有助于我们形成正确的设计思想和培养良好的设计风格。
桥接模式和适配器模式的区别在于使用场合不同,适配器模式主要解决两个已有接口间的匹配问题。这种情况下被适配的接口的实现往往是一个黑匣子。我们不想,也不能改变这个接口及其实现。同时也不能控制其演化,只要相关的对象能与系统定义的接口协同工作即可。适配器模式经常用在与第三方产品的功能集成上,采用该模式适应新类型的增加的方式是开发针对这个类的适配器。而桥接模式则不同,参与桥接的接口是稳定的,用户可以扩展和修改桥接种的类,但是不能改变接口。桥接模式通过接口继承或者类继承实现功能的扩展。
按照GOF的说法,桥接模式和适配器模式用于设计的不同阶段,桥接模式用于设计的前期,即在设计类的时候将雷规划为逻辑和实现两大类,使他们可以分别进行演化;而适配器模式用于设计完成之后,当发现完成的类无法协同工作时,可以采用适配器模式。如下图的报表处理模块所示:
五、阅读材料
3分钟理解桥接模式:笔和画的关系
https://www.cnblogs.com/davidwang456/p/4025926.html
详解设计模式之结构型模式https://zhuanlan.zhihu.com/p/91836046