使用设计模式进行代码性能优化
大家选择性参考,因为每个人的程序都是不一样的,使用什么设计模式,如何使用取决于自己。
1. FlyWeight设计模式:
因为AtomicStructure中Electron的对象过多,并且其实它们除了所处的track,是等同的。因此我们使用FlyWeight设计模式设计Electron工厂,基本思想就是对于每一个轨道只有一个Electron实例。
但是有一处需要注意:因为以前的程序是依据引用(内存地址)判断相同的,在添加物体时的普遍规则是如果轨道系统中有相同的对象则报错,此处需要在子类中覆盖该方法,不进行对象相同检查。
实现Flyweight接口的具体享元电子:
享元电子的工厂:
大家仿照这种写法就行:
使用则在文件中创建工厂,如以下方式
2. Prototype设计模式:
对于该轨道系统,事实上我认为最适合Prototype设计模式的是享元电子的部分,我们可以以一个享元电子作为原型,使用clone()方法来创建新的实例。
由于电子的Track是不同的,被复制的享元电子中引用了Track时,需要创建新的Track(而不是共享)。因此我们需要使用深拷贝。
3. Singleton设计模式
类似于lab2中构建一个图之后,getInstance返回一个图的实例。我们实验中描述轨道物体之间关系、描述中心物体和轨道物体之间关系的图也可以这样返回图的一个单例,通过封装确保对象的复用,不用让客户端考虑。
private static EeIntimacyMap instance = new EeIntimacyMap();
public static EeIntimacyMap getInstance() {
return instance;
}
EeIntimacyMap s = EeIntimacyMap.getInstance();
4. 对于Object Pool 设计模式,我的程序中并没有很合适的使用之处,但是我们可以产生一个不大的整形数的时候,使用Integer num = 1; 因为Integer类中,缓存了从-128到127之间的所有的整数对象,这样也是内存友好的一种方式。
5. 其他的性能改进:声明字符串变量的时候,使用 ”” 而不是用new String方法。