|
|
教学公告
18软件工程《软件构造》第7周安排
一、教学安排
讲授第14章的内容216-231页
讲授第15章的内容232-244页
实验作业在学者网课程平台:
http://www.scholat.com/course/rjgz
二、重点难点
1、 理解迪米特法则
2、 理解外观模式和享元模式的动机和结构
3、 掌握外观模式的使用及其优缺点
4、 掌握享元模式的使用及实践课本实例
5、 理解享元模式中的外部状态和内部状态的意义和区别
大家可以根据自己的情况进行相应的预习
三、课前思考
小明所在的软件公司欲软件公司开发人员通过对围棋软件进行分析,发现在围棋棋盘中包含大量的黑子和白子,它们的形状、大小都一模一样,只是出现的位置不同而已。如果将每一个棋子都作为一个独立的对象存储在内存中,将导致该围棋软件在运行时所需内存空间较大,如何降低运行代价、提高系统性能是开发人员需要解决的一个问题。
思考1:围棋软件的界面部分有什么特点?
思考2:该实例是否还包含了单例模式和简单工厂模式的方案?
思考3:关于Java String类这种在修改享元对象时,先将原有对象复制一份,然后在新对象上再实施修改操作的机制称为“Copy On Write”,大家可以自行查询相关资料来进一步了解和学习“Copy On Write”机制。
四、师说
从字面上如何理解:享: 共享,分享;元: 元素,共同部分,属性;模式: 一种方法。也就是说,享元模式是一种将共同部分共享起来的方法。一个类它可能生成好多对象,但这些对象根据属性值的不同一共分成N类,每种类型中属性值都是一样的。在这种情况下,如果创建好多对象,那么这些对象中很多属性值都是重复的,从而造成了大量的内存浪费。而享元模式能够解决重复对象的内存浪费的问题。
何时使用? 享元模式可以避免大量非常相似的对象的开销。好像我们平时开发文本编辑器,在文本文档中可以插入图片、动画、视频等多媒体资料,为了节约系统资源,相同的图片、动画和视频在同一个文档中只需保存一份,但是可以多次重复出现,而且它们每次出现时位置和大小均可不同。这就可以用享元模式。在程序设计中,如果发现需要大量细粒度的类对象来表示数据,而且这些类除了几个参数不同以外,其他的属性都是相同的,这时候就可以使用享元模式。类中相同的属性可以通过工厂类来共享,这些属性就是享元类的内部状态;而那些会变化的属性放在新建的外部对象中,作为参数传递给享元类的函数。
享元模式的优点: 享元模式通过共享对象的方式,把所有对象的公共属性存放在同一个对象中,不同的属性存放在外部类中,从而起到了节省存储空间的作用。
五、阅读材料
漫谈设计模式之享元模式(Flyweight)
https://blog.csdn.net/heaven_evil/article/details/70310044
白话设计——浅谈迪米特法则
https://www.jianshu.com/p/14589fb6978e