来自:https://www.cnblogs.com/xiaoguangit/p/5386042.html
今天在公交车上看了马士兵的工厂模式,在实体类中实现工厂模式,单例和多例。
这些东西还是很有用的,而且没用过多例,在博客记录一下。
举一个小例子:
通常建立对象
新建一个Car实体类:
public class Car { public void run(){ System.out.println("Car在雨中行驶"); } }
新建一个Test类:
public class Test { public static void main(String[] args) { Car car = new Car(); car.run(); } }
运行结果:
Car在雨中行驶
使用工厂模式建立对象
Car实体类:
public class Car { private Car(){} public static Car getInstance(){ return new Car(); } public void run(){ System.out.println("Car在雨中行驶"); } }
工厂生产对象
Test类:
public class Test { public static void main(String[] args) { Car car = Car.getInstance(); car.run(); } }
运行结果:
Car在雨中行驶
这里是使用工厂模式获取Car对象
需求:只有一辆车用来驾驶
这里使用单例实现:
Car类:
public class Car { private Car(){} private static Car car = new Car(); public static Car getInstance(){ return car; } public void run(){ System.out.println("Car在雨中行驶"); } }
在这里创建私有静态对象,并返回,实现单例。
Test类:
public class Test { public static void main(String[] args) { Car car = Car.getInstance(); Car car2 = Car.getInstance(); if(car == car2) System.out.println("same car"); car.run(); } }
运行结果:
same car Car在雨中行驶
这样就用单例完成了只能使用一辆车
需求2:只能使用固定的2辆车
使用多例来实现:
Car类:
import java.util.ArrayList; import java.util.List; public class Car { private String name; private Car(){} private static List<Car> cars = new ArrayList<Car>(); public static List<Car> getInstance(){ Car car1 = new Car(); car1.setName("奔驰"); Car car2 = new Car(); car2.setName("宝马"); cars.add(car1); cars.add(car2); return cars; } public void run(){ System.out.println("Car在雨中行驶"); } public String getName() { return name; } public void setName(String name) { this.name = name; } }
在这里把私有静态对象改为对象的私有静态集合,实现多例。
Test类:
import java.util.List; public class Test { public static void main(String[] args) { List<Car> cars = Car.getInstance(); for(int i=0; i<2; i++){ System.out.println(cars.get(i).getName()); } } }
运行结果:
奔驰 宝马
这样就完成了只能使用固定的两辆车的需求。
数据库连接池也是使用多例的概念。