DesignPattern之Singleton
tags: Design Pattern
定义
Ensure a class has only one instance, and provide a global point of access to it.
public class Singleton {
private static final Singleton singleton = new Singleton();
// 把constructor设成private,防止在这个类以外的地方被调用
private Singleton() {
}
// 静态工厂方法
public static Singleton getInstance() {
return singleton;
}
}
例:
假如让每个司机只能开一辆车,那么在Car这个类中应用单例模式:
public class Car {
private static Car c = new Car();
private Car() {
}
public static Car getInstance() {
return c;
}
public void run() {
System.out.println("Car is running!");
}
}
关于静态工厂方法
例子:
public class Car {
private Car() {
}
public static Car getInstance() {
return new Car();
}
}
通过自己定义的getInstance()
方法自主产生对象,不依赖于new来产生对象,可以在getInstance方法里添加各种判断和限制。
任何方法,只要在它里面控制了对象产生的相关的逻辑,都可以称之为工厂相关的方法。
多例模式
从单例模式引申出多例模式:
import java.util.List;
public class Car {
private static Car c = new Car();
// 多例
private static List<Car> cars = new ArrayList<Car>();
private Car() {
}
public static Car getInstance() {
return c;
}
public void run() {
System.out.println("Car is running!");
}
}
有一个List装着很多car, 然后可以做一个静态初始化, 把这个List里面的车全部装上,将来getInstance的时候就可以返回car里面的任何一个。用一个容器装着好多car,将来需要的时候可以从里面拿一个出来,这种叫多例模式。