[design pattern](4) SImple Factory

前言

本博客主要介紹簡單工廠模式(Simple Factory),簡單工廠模式是建立型模式的一員,也是咱們平時coding用到的比較多的一個模式了。java

思考題

首先,讓咱們思考如下的需求:ide

博主,忽然很想吃宮保雞丁和西紅柿炒雞蛋,那麼博主的需求怎樣才能獲得知足呢?

 

當咱們沒有修煉過 簡單工廠模式 這本祕籍,我會本身動手作:學習

首先我會上百度搜索到製做那兩個菜的方法:測試

KungPaoChicken.java:spa

public class KungPaoChicken {
    private String name = "宮保雞丁";

    @Override
    public String toString() {
        return name;
    }
}

 

TomatoEgg.javacode

public class TomatoEgg {
    private String name = "西紅柿炒雞蛋";

    @Override
    public String toString() {
        return name;
    }
}

 

而後我開始製做這兩個菜:對象

Custom.javablog

public class Custom {
    public static void main(String... args) {
        KungPaoChicken kungPaoChicken = new KungPaoChicken();
        TomatoEgg tomatoEgg = new TomatoEgg();

        System.out.println(kungPaoChicken);
        System.out.println(tomatoEgg);
    }
}

 

全部的東西都是咱們本身去操做。繼承

下面咱們給出了上面的代碼的uml類圖:博客

簡單工廠模式(Simple Factory)

定義:提供一個建立對象實例的功能,而無需用戶本身去建立,無需關注具體實現。

類圖:

 

上面的類途中一共有三個角色:

  • 抽象產品(Product):負責抽象出一類產品的行爲,全部的產品都須要實現這個行爲,使工廠可使用這個類來引用子類的實例。
  • 工廠(Factory):負責實例化產品,並返回父類的引用給用戶。將用戶和產品的具體實現分離。
  • 具體產品(Concrete):產品的具體實現,不一樣的產品有不一樣的實現,可是他們都要繼承抽象產品。

重構思考

經過簡單工廠的學習,博主忽然想去開一個飯店,這樣顧客只須要付錢而且點菜就能夠吃到想吃的菜了,想一想是否是很方便。

首先,咱們須要一個 抽象產品 :

Food.java:

public interface Food {
    void eat();
}

 

而後, 具體的產品 :

KungPaoChicken.java:

public class KungPaoChicken implements Food {
    @Override
    public void eat() {
        System.out.println("吃宮保雞丁");
    }
}

 

TomatoEgg.java:

public class TomatoEgg implements Food {
    @Override
    public void eat() {
        System.out.println("吃西紅柿");
    }
}

 

最後,咱們建立工廠:

MyHotal.java:

public class MyHotal {
    public Food createFood(String foodName) {
        switch(foodName) {
        case "KungPaoChicken":
            return new KungPaoChicken();
        case "TomatoEgg":
            return new TomatoEgg();
        default:
            return null;
    }
    }
}

 

 

那麼咱們來測試一下:

Custom.java:

public class Custom {
    public static void main(String ...args) {
        MyHotal myHotal = new MyHotal();
    Food kungPaoChicken = myHotal.createFood("KungPaoChicken");
    Food tomatoEgg = myHotal.createFood("TomatoEgg");

    kungPaoChicken.eat();
    tomatoEgg.eat();
    }
}
相關文章
相關標籤/搜索