今天在公交車上看了馬士兵的工廠模式,在實體類中實現工廠模式,單例和多例。
這些東西還是很有用的,而且沒用過多例,在博客記錄一下。
舉一個小例子:
通常建立對象
新建一個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()); } } }
運行結果:
奔馳
寶馬
這樣就完成了只能使用固定的兩輛車的需求。
數據庫連接池也是使用多例的概念。