|
|
教学公告
17软件工程《软件构造》第13周安排
一、教学安排
内容:
第21章 中介者模式(P323-336)
第22章 备忘录模式(P337-348)
导学视频资料:(要求课前预习)
砺儒云课堂:https://moodle.scnu.edu.cn/course/view.php?id=9522
授课:
时间:5月25日
上午 3-4节( 10:20 -12:00)--(3班、4班)
上午 7-8节 ( 15:40 -17:00)---(1班、2班)
腾讯课堂:
https://ke.qq.com/webcourse/index.html?cid=2107503&term_id=102209673&lite=1&from=800021724
二、重点难点
1、重点:掌握中介者模式和备忘录模式的动机及结构
2、难点:理解中介者模式和备忘录模式实现原理
三、课前思考
1、世界上存在着各种各样的数据库,不同数据库有各自的最适用的应用场景,对于同一份数据,最开 始可能使用关系型数据库(如MySQL)进行存储查询,使用Redis作为缓存数据库,当历史数据越来越多,需要构建数据仓库来处理数据库时,只使用MySQL来进行查询可能会比较较慢,所以需要将数据同步到Elasticsearch或者列式数据库如Hbase中进行大数据查询,另外,随着业务的扩展还技术需要,可能还需要引入其他数据库来支持业务拓展。 如何设计数据同步方案是一个非常重要的问题。数据源众多,目标端也众多,设计得不好可能 “牵一发而动全身”。如果每个数据源直接同步数据到目标端数据库,有 N 个数据库,那么最多可能的同步作业将达到 N * N 个,当修改了其中一个数据库的某些配置,可能需要修改另外的 N - 1 个数据库的同步作业。你是否能提供一种更好的方案,并编程模拟实现?
2、虽然在棋局博弈过程,我们都推崇“观棋不语真君子"."举棋不悔大丈夫",但是有些时候我们还是需要有悔棋的步骤。某款在线棋局博弈训练的软件中,为了方便指导学习者,需要提供悔棋功能。假设你是该公司的架构师,请你设计一个通用的解决方案。以方便不同种类棋局的程序员都能按统一的方式解决这个问题。
四、师说
在软件设计过程中,经常会碰到要实现多个对象相互间进行交互的情形(图1)。
如果设计不好,那么随着我们引入的对象越来越多,我们的系统将会变得关系非常复杂,导致维护困难。如果我们选择中介者模式来处理对象之间 交互就可以简化我们的对象之间的交互的结构。 除了上面的思考题,如果你有时间和兴趣你还可以思考下面的交互情形并编程模拟实现:
区块链涉及密码学、哈希算法、拜占庭问题、共识算法、故障模型、网络模型等诸多知识,也在金融等领域有广泛的应用。本题中,我们需要实现一个简单的区块链系统。
在一个分布式网络中,有n个节点通过m条边相连,节点编号从1至n。每个节点初始化都有一个相同的“创世块”,链长都为1,每个节点在整个过程中都需要维护一条主链,任何操作都只在主链上进行。在整个系统中产生的每个新块都有唯一的整数编号,创始块的编号为0,其余块的编号都为正整数。当某个节点的链更新时,会将它的主链发送给它相邻的节点(邻居);而当节点收到链时,决定是否更新自己的主链下列情况可能会导致某个节点的链更新:
·某个节点接收到邻居发送过来的链,与当前自己的主链进行比较:如果接收到的链更长,则将其作为自己的主链;如果收到的链长度与自身主链相同,且最后一块编号更小,则将其作为自己的主链
如果接收到的链更短,则直接忽略该链。
注:暂时回来所有节点都同时更新链的问题(同步)
五、阅读材料
中介者模式:
https://blog.csdn.net/wwwdc1012/article/details/83389158
备忘录模式:
https://cloud.tencent.com/developer/article/1055965