工廠模式

工廠模式分爲三種測試

簡單工廠模式對象

須要三個角色:產品抽象類(接口)、產品具體實現類、工廠類接口

/**
 * 產品抽象接口
 * Created by lidongyang on 2017/8/23 0023.
 */
public interface Car {
    void driver();
}
/**
 * 產品具體實現類1:寶馬
 * Created by lidongyang on 2017/8/23 0023.
 */
public class BMW implements Car {
    public void driver() {
        System.out.println("我是寶馬");
    }
}
/**
 * 產品具體實現類2:奔馳
 * Created by lidongyang on 2017/8/23 0023.
 */
public class Benz implements Car {
    public void driver() {
        System.out.println("我是奔馳");
    }
}
/**
 * 工廠類
 * Created by lidongyang on 2017/8/23 0023.
 */
public class Factory {
    public static Car create(String carType){
        if ("bmw".equals(carType)){
            return new BMW();
        }
        if("benz".equals(carType)){
            return new Benz();
        }
        return null;
    }
}

下面是測試類產品

/**
 * Created by lidongyang on 2017/8/22 0022.
 */
public class Test {
    public static void main(String[] args) {
        Car car = Factory.create("bmw");
        car.driver();
    }
}

從測試類咱們也能夠看出,在咱們須要一輛車的時候,咱們並不須要關心如何去建立這個車,咱們只要告訴工廠,我要寶馬,那麼工廠給咱們的就是寶馬。class

優勢:一、不須要關心對象的具體建立  二、符合開閉原則(對擴展開放,對修改關閉),可是這裏貌似不全對,當咱們若是須要一個馬自達時,再加一個馬自達的實現類就行了,而不須要改變其餘的,這裏實現了對擴展開放。可是工廠類的話,咱們仍是得修改,這違背了對修改關閉這部分原則。爲了解決這個問題,咱們有下面的一種工廠模式基礎

工廠方法模式擴展

有四個角色:工廠抽象類(接口)、具體工廠類、產品抽象類(接口)、具體產品類程序

對於產品抽象類和具體產品類,和上面同樣,這裏不在列代碼,下面看工廠類方法

/**
 * 工廠接口
 * Created by lidongyang on 2017/8/23 0023.
 */
public interface Factory {
    Car creat();
}
/**
 * 工廠實現類一、寶馬工廠
 * Created by lidongyang on 2017/8/23 0023.
 */
public class BMWFactory implements Factory{

    public Car creat() {
        return new BMW();
    }
}

下面是測試類im

/**
 * Created by lidongyang on 2017/8/22 0022.
 */
public class Test {
    public static void main(String[] args) {
        Factory factory = new BMWFactory();
        Car car =  factory.creat();
        car.driver();
    }
}

由此咱們看出,當咱們須要一輛車時,咱們先得有一個對應車品牌的工廠,而後從工廠中拿車,這解決了簡單工廠模式中不知足的「對修改關閉」的問題,假如咱們再次須要馬自達時,只要再加一個馬自達的工廠類、馬自達的產品類,就OK了。可是咱們又遇到一個問題,若是有一天咱們須要100種產品,難道咱們要建100個工廠類嗎?

抽象工廠模式

個人理解抽象工廠模式雖然必定程序上解決了上面的問題,可是它的主要目的不是解決這個問題。

抽象工廠模式,其實就是在上述的基礎上,抽象工廠類(接口)中,不只能生產小轎車,還能夠生產大卡車、還能夠生產吉普車等等,以下

/**
 * 工廠接口,生產吉普和小轎車
 * Created by lidongyang on 2017/8/23 0023.
 */
public interface Factory {
    Jeep creatJeep();
    Car creatCar();
}
/**
 * 工廠實現類1,生產奔馳的品牌(奔馳廠)
 * eated by lidongyang on 2017/8/24 0024.
 */
public class BenzFactory implements Factory {
    public Jeep creatJeep() {
        return new BenzJeep();
    }

    public Car creatCar() {
        return new Benz();
    }
}
/**
 * 工廠實現類二、寶馬工廠
 * Created by lidongyang on 2017/8/23 0023.
 */
public class BMWFactory implements Factory{

    public Jeep creatJeep() {
        return new BMWJeep();
    }

    public Car creatCar() {
        return new BMW();
    }
}

 

綜上所述,其實三種工廠模式,是層層遞進的,總結一下

簡單工廠:產品抽象類(接口)、具體產品類、工廠類

工廠模式:產品抽象類(接口)、具體產品類、工廠類、抽象工廠類(接口)

抽象工廠:產品抽象類(接口)、具體產品類、工廠類、抽象工廠類(接口)

其實抽象工廠就是工廠模式的一個進化。工廠模式的工廠只能生產一種產品,而抽象工廠的工廠能夠生產多種產品。

相關文章
相關標籤/搜索