設計模式-抽象工廠模式

###抽象工廠模式 抽象工廠模式類圖設計

####抽象工廠模式優勢:code

  • 抽象工廠模式隔離了具體類的生產,使得客戶並不須要知道什麼被建立。對象

  • 當一個產品族中的多個對象被設計成一塊兒工做時,它能保證客戶端始終只使用同一個產品族中的對象。產品

  • 增長新的具體工廠和產品族很方便,無須修改已有系統,符合「開閉原則」。ast

####抽象工廠模式缺點:class

  • 增長新的產品等級結構很複雜,須要修改抽象工廠和全部的具體工廠類,對「開閉原則」的支持呈現傾斜性。

####代碼實現im

//早餐工廠
public interface BreakfastFactory {
    Food makeFood();
    Drink makeDrink();
}

//飲料工廠
public interface Drink {
	void drink();
}

//實現類
public class EastDrink implements Drink {
    public void drink() {
        System.out.println("喝豆漿");
    }
}

public class WestDrink implements Drink {
    public void drink() {
        System.out.println("喝牛奶");
    }
}

//主食工廠
public interface Food {
	void eat();
}

//實現類
public class EastFood implements Food {
    public void eat() {
        System.out.println("吃油條");
    }
}

public class WestFood implements Food {
    public void eat() {
        System.out.println("吃麪包");
    }
}

//早餐工廠實現類(中式早餐)
public class EastBreakfast implements BreakfastFactory {
    public Food makeFood() {
        return new EastFood();
    }

    public Drink makeDrink() {
        return new EastDrink();
    }
}

//西式早餐
public class WestBreakfast implements BreakfastFactory {
    public Food makeFood() {
        return new WestFood();
    }

    public Drink makeDrink() {
        return new WestDrink();
    }
}

public class Client {
    public static void main(String[] args) {
        System.out.println("**********第一天吃西餐***********");
        BreakfastFactory breakfast = new WestBreakfast();
        breakfast.makeDrink().drink();
        breakfast.makeFood().eat();
        System.out.println("**********第一天吃中餐***********");
        breakfast = new EastBreakfast();
        breakfast.makeDrink().drink();
        breakfast.makeFood().eat();
    }
}

運行結果:
**********第一天吃西餐***********
喝牛奶
吃麪包
**********第一天吃中餐***********
喝豆漿
吃油條

####根據代碼優缺點分析客戶端

優勢項目

若是咱們想是一箇中西式的早餐,好比:喝牛奶吃油條,這個很容易實現,咱們只須要一個實現早餐工廠的類,即可以建立牛奶喝油條。static

缺點 若是咱們又想添加一個飯後項目,好比西方飯前禱告,中方飯前祝酒,這樣就得添加一個飯前的工廠,這樣的話須要修改早餐工廠和其具體的實現類(西式早餐喝中式早餐)

相關文章
相關標籤/搜索