刚刚阅读了《设计模式之禅》中关于java中设计模式的介绍,这里按照自己的理解对常见的23种设计模式进行简单的总结。
一、单例模式。
相对于其他的设计模式,单例设计模式是比较简单的一种设计模式了。其核心就是保证类对象的唯一性。这类似于古代的帝王,只能有一个。所以不管你在什么时候访问这个使用“帝王”这个类的对象,获得的永远是同一个对象。
那么,如何保证对象的唯一性呢?
首先对于要保证唯一性的类不能提供对外的构造函数。这就要求我们需要将构造函数定义成private。
然后,在类中预先定义并初始化一个该类的对象,并对外提供唯一的get接口。这里可以将该成员变量定义为final,防止对该引用进行更改,从而保证变量唯一性。
这样的话这个类就只能访问唯一的对象了。
实现具体代码如下:
public class Singleton {
private static final Singleton SINGLETON = new Singleton();
private Singleton(){
}
public static Singleton getSingleton(){
return SINGLETON;
}
}
当然,有时候我们可能不止需要一个对象,所以可以对单例设计模式进行扩展,成为可以随机提供一定数量的对象的访问的模式。比如,应用程序对于数据库的连接,如果仅仅提供一个连接对象,在较高并发的情况下容易产生拥堵,而如果不限制连接,有可能应为连接过多而出现数据库过载。这时,提供固定数量的连接对象是很有必要的。
public class SingleDemo {
private String name;
private static final int MAXNUMOFEMPEROR = 5;
private static ArrayList<SingleDemo> demoList = new ArrayList<SingleDemo>();
private SingleDemo(String name){
this.name = name;
}
/**
* 初始化所有对象
*/
static{
for(int i=0;i<MAXNUMOFEMPEROR;i++){
demoList.add(new SingleDemo("这是第"+i+"个对象"));
}
}
public static SingleDemo getSingleDemo(){
Random random = new Random();
return demoList.get(random.nextInt(MAXNUMOFEMPEROR));
}
public void say(){
System.out.println(name);
}
}
这样,我们就可以提供一定数量的对象了。