首先关于系统优化可以分为
1.设计优化
2.代码优化
3.数据库优化
大致分为这三个方面的优化,当然在针对这个系统的优化之前的前提是明确系统需求。
今天最要针对设计优化上一些讲解和心得笔记。当然谈到设计,我们首先想到的是设计原则和23种设计模式。
常见代码中设计到的几种设计模式
1.单例模式:保证系统中只有一个实例化对象。
2.代理模式
3.享元模式
4.装饰者模式
5.观察者模式
6.Value Object 模式
首先,我们来谈谈单例模式,先看一段代码
/**
* Created by Darker on 15/6/11.
*/
public class Singleton{
private static Singleton ourInstance=newSingleton();
public static Singleton getInstance(){
return ourInstance;
}
private Singleton(){
System.out.println("init Singleton");
}
}
上面的代码是,创建单例模式的常见方式,也是最容易上手的代码,但是它唯一的缺点就是在JVM 加载类的时候,就需要进行加载,时间太慢,直接影响到系统功能,所以要考虑到延迟加载。
然后,再来看看一段代码
/**
* Created by Darker on 15/6/11.
*/
public class Singleton{
private static Singleton ourInstance;
public static Singleton getInstance(){
if(ourInstance==null){
ourInstance=newSingleton();
}
return ourInstance;
}
private Singleton(){
System.out.println("init Singleton");
}
}
当你看到这段代码的时候,你肯定觉得这种方式和上面的static 方式没什么区别,无非只是加了一个判断是否为null,确实做到延迟加载,哟西,等等…我们是不是忘记了多线程下,这段代码就会出问题,线程并行进行,判断为null,有可能就会出现多个instance。于是我们就线到同步关键字,synchronized。于是有了下面的代码.
/**
* Created by Darker on 15/6/11.
*/
public class Singleton{
private static Singleton ourInstance;
public static synchronized Singleton getInstance(){
if(ourInstance==null){
ourInstance=newSingleton();
}
return ourInstance;
}
private Singleton(){
System.out.println("init Singleton");
}
}
nice 啊!,是不是很帅.完全解决多线程下的问题,保证只有一个单例。等等,所谓的优化,是从空间和时间上进行用户啊,现在确实能保证空间,功能上没有差错,但是耗时?? 通过测试,static 单例,和 同步单例,在开启5个线程的同时耗时相差2个数量级,所以这段代码以耗时为代价,完成延迟加载,感觉有点得不偿失。说明还有更强大的单例代码设计。于是便有了下面一段代码.
/**
* Created by Darker on 15/6/11.
*/
public class Singleton{
private Singleton(){
System.out.println("init Singleton");
}
private static class SingletonHodler{
private static Singleton instance=newSingleton();public static Singleton getInstance(){
return SingletonHodler.instance;
}
}
}
哇,强大的内部类,竟然出现在这段代码中,这样的实现方式,很棒吧,使用内部类来维护单例的实例,当Singleton被加载时,其中内部类并不会被加载,只有当调用getInstance()方法的时候,才能被加载,等等延迟加载是不是很屌的就解决了,对的。那么多线程下,这代码管用么?private static Singleton instance=new Singleton();这段代码,和第一种是一样的,对,这就是天生对多线程友好,所以也解决了。多线程同步的问题….nice 啊。
最后,当然..你用反射机制 也可以new出多个实例,但是这么极端…你就有点过啦..