Java Factory概念学习第一课 (单例、多例)
- 单例的概念
- 多例的概念
单例的概念
对于一个Car类:
public class Car{
public void run(){
System.out.println("汽车突突突地跑");
}
}
另一个类来获得Car,也就是实例化这个Car,:
public class Test{
public static void main(String[] args){
Car car = new Car();
car.run();
}
}
此时对于Car类来说,本身并不能限制谁可以或者不可以实例化。此时我们可以这样做:
public class Car{
private Car(){}
public Car getInstance(){
return new Car();
}
public void run(){
System.out.println("汽车突突突地跑");
}
}
将构造方法声明为私有,那么Test类只能通过getInstance来实例化Car对象,那么我们就可以在getInstance方法里加入验证和限制来进行约束。
现在,Car类本身并不能控制或者限制Test类示例几个Car对象,假设我们限制只能获得一台车,那么可以这样做:
public class Car{
private Car(){}
private static Car car = new Car();
public Car getInstance(){
return car;
}
public void run(){
System.out.println("汽车突突突地跑");
}
}
那么,无论Test类调用多少次getInstance方法,都只会返回同一个car。
public class Test{
public static void main(String[] args){
Car c = Car.getInstance();
Car c2 = Car.getInstance();
System.out.println(c == c2);
}
}
结果输出为true,即两个对象c和c2指向同一个地址,即只有一辆小汽车被分配。
这是单例。
多例的概念
自然而然的,我们可以解除只能获得一台车的限制,但是还是要在控制之下完成对象的实例化。
这里我们可以使用多例的办法,在单例的基础上修改一下
public class Car{
private Car(){}
private static List<Car> carList = new ArrayList<>();
for(int i = 0; i < 5; i ++){
carList.add(new Car());
}
public Car getInstance(){
return carList.get();
}
public void run(){
System.out.println("汽车突突突地跑");
}
}
这样Test类依旧只需要调用getInstance就可以获得实例了。
这就是多例。
下一篇:一般factory