設計模式之4 多工廠的工廠模式

多工廠工廠模式

當我們做一個比較複雜的項目時,經常會遇到初始化一個對象很耗費精力的情況,所有的產品類都放到一個工廠方法中進行初始化會使代碼結構不清晰。
考慮到需要結構清晰,我們就爲每個產品定義一個創造者,然後由調用者自己去選擇與哪個工廠方法關聯。

uml類圖

這裏寫圖片描述

實現

  1. 抽象工廠類AbstractMultiMachineFactory.java
public abstract class AbstractMultiMachineFactory {
   abstract public Machine createMaching();
}
  1. 具體工廠類

自行車工廠

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();
    }
}

產品類不動

設計模式之2 工廠方法模式

客戶測試

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();
            }
        });
    }
}

源碼

單例模式

簡單工廠模式

工廠方法模式

博客系列

設計模式之1 單例模式

設計模式之2 工廠方法模式

設計模式之3 簡單工廠模式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章