17软件工程《软件构造》第2周安排
一、教学安排
讲授第4-5章的内容67-91页
自学第6章的内容 92-105页
导学视频资料在砺儒云课堂:
https://moodle.scnu.edu.cn/course/view.php?id=9522
实验作业在学者网课程平台:
http://www.scholat.com/course/rjgz
(本周完成实验一)
二、重点难点
1、理解单一职责原则、里氏代换原则、开闭原则
2、理解简单工厂模式的优缺点
3、熟练掌握工厂方法模式的多态性体现和客户端代码编写
4、理解DOM和Java反射机制来操作XML配置文件
5、了解抽象工厂模式的结构及实现
三、课前思考
公司要求小明负责开发某款系统日志记录器,要求支持多种日志记录方式,如文件记录、数据库记录等,且用户可以根据要求动态选择日志记录方式。
在设计各类日志记录器时,小明发现需要对日志记录器进行一些初始化工作,初始化参数的设置过程较为复杂,而且某些参数的设置有严格的先后次序,否则可能会发生记录失败。如何封装记录器的初始化过程并保证多种记录器切换的灵活性是小明面临的一个难题。
思考1:
在简单工厂模式中增加新的具体产品时是否符合“开闭原则”?如果不符合,原有系统需作出哪些修改?
思考2:
工厂方法模式中的工厂方法能否为静态方法?为什么?
思考3:
抽象工厂模式和工厂方法模式的关系是什么? 抽象工厂模式是否符合“开闭原则”?
四、师说
众所周知,设计模式是针对一些特定场景的、比较通用的解决方案。实际上这个定义已经指明了学习设计模式的两个重点:场景和方案。也就是说,学习设计模式的重点在于搞清楚这个模式的使用场景、以及它解决了什么问题。再深入一点的话,可以思考一下如果不使用设计模式还有什么样的方案、以及各种方案之间的优劣对比。
使用设计模式时也是一样:优先考虑使用场景以及要解决的问题,其次考虑各种解决方案之间的优劣对比,最后——其实压根也不用去考虑——到底要使用模式A还是模式B。总的来说,“使用-对比-概念,就是这个顺序”。之所以强调这一点,是因为无论是学习还是使用设计模式,我都见过很多人把时间精力花费在分辨模式A与模式B之间的概念上。最后呢?大多数人都对把自己绕晕,不但没搞清楚两者的区别,还忘了它们要怎么用、什么时候用。说到底,“黑猫白猫,会捉老鼠就是好猫”。我们学习和使用设计模式时,也不应该把重点放在“这是黄色的母马还是黑色的公马”上,而应该是这马适合长途负重、还是短距离冲刺。找准了使用场景,设计模式其实又容易学、又容易用。
五、阅读材料
工厂模式理解了没有?
工厂模式三兄弟
https://www.jianshu.com/p/7acc0ddb8e8c