您申请加入课程:软件构造

软件构造

华南师范大学软件工程专业

https://www.scholat.com/course/rjgz
  • 创建者

    Creator

    潘家辉
  • 活跃度

    Activeness

  • 访问量

    Visits

    76273

教学公告

21软工第2周安排
[作者: 潘家辉  发布时间:2024-03-04 21:05:26  浏览次数:253次]

一、教学安排

讲授第5-6章的内容77-105页

实验作业本周二巩固理解4-6章3种工厂模式

二、重点难点

1、理解单一职责原则、里氏代换原则、开闭原则

2、理解简单工厂模式的优缺点

3、熟练掌握工厂方法模式的多态性体现和客户端代码编写

4、理解DOM和Java反射机制来操作XML配置文件

5、了解抽象工厂模式的结构及实现

三、课前思考

公司要求小明负责开发某款系统日志记录器,要求支持多种日志记录方式,如文件记录、数据库记录等,且用户可以根据要求动态选择日志记录方式。

在设计各类日志记录器时,小明发现需要对日志记录器进行一些初始化工作,初始化参数的设置过程较为复杂,而且某些参数的设置有严格的先后次序,否则可能会发生记录失败。如何封装记录器的初始化过程并保证多种记录器切换的灵活性是小明面临的一个难题。

思考1: 在简单工厂模式中增加新的具体产品时是否符合“开闭原则”?如果不符合,原有系统需作出哪些修改?

思考2: 工厂方法模式中的工厂方法能否为静态方法?为什么?

思考3: 抽象工厂模式和工厂方法模式的关系是什么? 抽象工厂模式是否符合“开闭原则”?

四、师说

这两周我们讲解的3个工厂相关的设计模式,可以结合一个例子“惠普、戴尔等工厂生产鼠标、键盘、耳麦等产品”总结如下:

1、简单工厂模式的方式:

有一个专门生产某个产品的类,比如下图种的鼠标工厂专业生产鼠标。给参数0,生产戴尔鼠标;给参数1,生产惠普鼠标。

2、工厂方法模式

工厂方法模式也就是鼠标工厂是个父类(接口),有生产鼠标这个方法,戴尔鼠标工厂(类)和惠普鼠标工厂(类)都继承鼠标工厂,可以分别生产戴尔鼠标,惠普鼠标。

生产哪种鼠标不再由像简单工厂模式那样由参数决定,而是由对应的鼠标生产厂工厂创建,比如说戴尔鼠标工厂,就会生产戴尔鼠标。

3、抽象工厂模式

抽象工厂模式和前面两种模式不同,前面两种模式只能生产一类产品(鼠标)。这里的抽象工厂模式不仅生产鼠标,同时也能生产键盘。

抽象出一个父工厂,PC厂商接口,由生产鼠标,生产键盘两个方法,其中,戴尔工厂,惠普工厂继承了它。戴尔工厂可以生产戴尔鼠标+戴尔键盘;惠普工厂可以生产惠普鼠标+惠普键盘。


众所周知,设计模式是针对一些特定场景的、比较通用的解决方案。实际上这个定义已经指明了学习设计模式的两个重点:场景和方案。也就是说,学习设计模式的重点在于搞清楚这个模式的使用场景、以及它解决了什么问题。再深入一点的话,可以思考一下如果不使用设计模式还有什么样的方案、以及各种方案之间的优劣对比。

使用设计模式时也是一样:优先考虑使用场景以及要解决的问题,其次考虑各种解决方案之间的优劣对比,最后——其实压根也不用去考虑——到底要使用模式A还是模式B。总的来说,“使用-对比-概念,就是这个顺序”。之所以强调这一点,是因为无论是学习还是使用设计模式,我都见过很多人把时间精力花费在分辨模式A与模式B之间的概念上。最后呢?大多数人都对把自己绕晕,不但没搞清楚两者的区别,还忘了它们要怎么用、什么时候用。说到底,“黑猫白猫,会捉老鼠就是好猫”。我们学习和使用设计模式时,也不应该把重点放在“这是黄色的母马还是黑色的公马”上,而应该是这马适合长途负重、还是短距离冲刺。找准了使用场景,设计模式其实又容易学、又容易用。

五、阅读材料

工厂模式理解了没有?

https://mp.weixin.qq.com/s?__biz=MzI4Njg5MDA5NA==&mid=2247484243&idx=1&sn=972cbe6cdb578256e4d4771e7ca25de3&chksm=ebd74252dca0cb44419903758e8ca52d9ab287562f80be9365e305d6dcc2deaa45b40f9fd2e9&scene=21###wechat_redirect

工厂模式三兄弟

https://www.jianshu.com/p/7acc0ddb8e8c


相关课程

扫一扫二维码,快速加入本课程!

放大二维码 查看使用方法
关闭