食用指南
在本次作业中,你需要结合若干具体场景,绘制多个设计模式的类图,比较不同设计模式之间的区别,并理解每个设计模式的设计意图和应用场景。
本次作业分为三个模块:你需要一共绘制五个设计模式的类图,在十一个场景中选择合适的设计模式,并分别概括三类设计模式的设计意图和应用场景。
我们特意将作业中的场景设计成了基于前半学期学习的 C++ 标准库知识的场景。如果有同学想动手实现一下学过的各种设计模式,可以尝试实现作业中提到的场景,作为一个易上手、工作量也较小的练习。
作业截止后不久,我们会发布每个 STEP 的参考答案,并针对同学们提交中出现的设计模式误解(如果有)补充相应讲解。
作业要求
你需要在教学网对应的作业模块提交:
- 一个PDF文件,命名为"学号-姓名"(如2500010086-二进雉),内容包含本次作业三个模块的解答
每个模块的解答应包括两个部分:
- 所有STEP的解答,包括你选择的设计模式和相应的类图
- 用自己的语言简单总结本模块涉及的设计模式的设计意图和应用场景
你可以使用生成模型辅助自己理解设计模式的相关知识,但是不要直接复制粘贴生成模型的输出内容到本次作业中,我们想看到的是你自己的理解。
每道题目的具体解答要求见题目文档。
任何符合上述格式的作业,只要态度认真,无学术诚信问题,都将得到满分。
为什么
为什么强调不同设计模式之间的对比
在(往届的)期末考试中,设计模式的考察形式往往是给定一个应用场景,让你选择合适的设计模式,然后画出该设计模式的类图。一个很尴尬的现象是:虽然对于选定的设计模式,同学们往往可以正确画出它的类图,但是相当一部分同学根本没选对设计模式。这在一定程度上反映出,同学们还没有很好地掌握不同设计模式之间的差别及其设计意图。以此为出发点,本次作业的设计侧重点放在了不同设计模式之间的对比上。
如果想在期末考试的设计模式板块拿到较好的成绩,推荐在做本次作业的过程中认真思考不同设计模式之间的区别,不仅要会画各个设计模式的类图,还要搞清楚它们分别适用于什么场景。
为什么作业涉及这么多设计模式,不能只选几个有代表性的吗
是的,去年的我们也是这么想的,我们选出了包括装饰器模式在内的三个设计模式精心设计了详细的作业。
在期末阅卷时,我们确信同学们通过那次作业已经完全掌握了 装饰器模式 的使用,因为在所有要求同学们选择合适设计模式的题目中,都有相当一部分同学毫不犹豫地选择了 装饰器模式,即便题目本身和 装饰器模式 并没什么关系。理所当然,这样盲目的选择并不能得到分数。
为了防止悲剧的重演,这次作业涉及到了全部的设计模式。请记住,课上讲过的每一种设计模式(简单工厂模式除外)都有相同的概率在期末考题中出现。