多工廠工廠模式
當我們做一個比較複雜的項目時,經常會遇到初始化一個對象很耗費精力的情況,所有的產品類都放到一個工廠方法中進行初始化會使代碼結構不清晰。
考慮到需要結構清晰,我們就爲每個產品定義一個創造者,然後由調用者自己去選擇與哪個工廠方法關聯。
uml類圖
實現
- 抽象工廠類AbstractMultiMachineFactory.java
public abstract class AbstractMultiMachineFactory {
abstract public Machine createMaching();
}
- 具體工廠類
自行車工廠
BikeFactory.java
public class BikeFactory extends AbstractMultiMachineFactory{
@Override
public Machine createMaching() {
return new Bike();
}
}
轎車工廠
CarFactory.java
public class CarFactory extends AbstractMultiMachineFactory{
@Override
public Machine createMaching() {
return new Car();
}
}
卡車工廠
TruckFactory.java
public class TruckFactory extends AbstractMultiMachineFactory{
@Override
public Machine createMaching() {
return new Truck();
}
}
產品類不動
客戶測試
public class ClientTest {
@Test
public void createMachine(){
// 打包給客戶的集裝箱
List<Machine> list = new ArrayList<>() ;
/**
* 1.客戶下訂單,開始造車(2輛汽車,2兩卡車,2兩自行車)
*/
// 造汽車生產線
CarFactory carFactory = new CarFactory() ;
for(int i=0;i<2;i++){
list.add(carFactory.createMaching());
}
// 造卡車生產線
TruckFactory truckFactory = new TruckFactory() ;
for(int i=0;i<2;i++){
list.add(truckFactory.createMaching());
}
// 造自行車生產線
BikeFactory bikeFactory = new BikeFactory() ;
for(int i=0;i<2;i++){
list.add(bikeFactory.createMaching());
}
//客戶開始測驗每輛車的性能
list.forEach(ele -> {
ele.start() ;
ele.speed();
ele.stop();
if(ele instanceof Car){
((Car) ele).blow();
}
if(ele instanceof Truck){
((Truck) ele).blow();
}
});
}
}