1、工厂方法模式(Factory Method Pattern)
所有工厂模式都用来封装对象的创建。工厂方法模式通过让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目的。
工厂方法模式定义了一个创建对象的接口(称为“工厂方法”),但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
2、抽象工厂模式(Abstract Factory Pattern)
抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
抽象工厂的方法经常以工厂方法的方式实现。抽象工厂的任务是创建一个具体产品,利用实现抽象工厂的子类来提供这些具体的做法。
3、单件模式(Singleton Pattern)
单件模式确保一个类只有一个实例,并提供一个全局访问点。
单件模式需要注意的是多线程的情况,为了确保单件模式能在多线程的情况下正常工作,有以下三个选择:
a、把getInstance()变成同步方法。
public class Singleton {
private static Singleton uniqueInstance;
private Singleton() {}
public static synchronized
Singleton getInstance() {
if(uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
// other functions...
}
同步会降低性能,而且只有第一次执行此方法时,才真正需要同步。也就是说,一旦设置好uniqueInstance变量,就不再需要同步这个方法了。
b、使用“急切”创建实例,而不用延迟实例化的做法。
public class Singleton {
private static Singleton uniqueInstance = new Singleton()
;
private Singleton() {}
public static Singleton getInstance() {
return uniqueInstance;
}
// other functions...
}
利用这个做法,JVM在加载这个类的时候马上创建唯一的单件实例。
c、用“双重检查锁”,在getInstance()中减少使用同步。
public class Singleton {
private volatile
static Singleton uniqueInstance;
private Singleton() {}
public static Singleton getInstance() {
if(uniqueInstance == null) { //检查实例,如果不存在,就进入同步区块
synchronized(Singleton.class)
{
if(uniqueInstance == null)
{ //进入区块后再检查一次,如果仍为null,才创建实例
uniqueInstance = new Singleton();
}
}
}
}
// other functions...
}
volatile关键词确保当uniqueInstance变量被实例化成Singleton实例时,多个线程正确地处理uniqueInstance变量。只有第一次会进入同步区块,执行创建实例的代码,以后就不会进入同步区块了。
注意:在1.4及更早版本的Java中,许多JVM对于volatile关键字的实现会导致双重检查加锁的失效,因为如果使用旧版的Java,就不要利用这个方法实现单件模式。
4、原型模式(Prototype Pattern)
用原型实例制定创建对象的种类,并且通过拷贝这些原型创建新的对象。
关于原型模式的一些文章:http://tailsherry.iteye.com/blog/121580,http://www.cnblogs.com/kid-li/archive/2006/05/18/403559.html。
5、生成器模式(Builder Pattern)
将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示。它使你可以改变一个产品的内部表示,它将构造代码和表示代码分开,它使你可以对构造过程进行更精细的控制。
对生成器模式详细讲解的文章:http://www.cnblogs.com/kid-li/archive/2006/05/08/393529.html。