1. 程式人生 > 其它 >設計模式(9):JAVA(9):設計模式(2)工廠模式:提供了一種建立物件的最佳方式(2)工廠方法設計模式

設計模式(9):JAVA(9):設計模式(2)工廠模式:提供了一種建立物件的最佳方式(2)工廠方法設計模式

package com.woniuxy.i_factorymethod.a;

// 為了解決簡單工廠的缺點,我們重構程式碼:

interface Food {
    public void eat();
}

class Hamburger implements Food {
    @Override
    public void eat() {
        System.out.println("漢堡包");
    }
}
class FrenchFries implements Food {
    @Override
    public void eat() {
        System.out.println(
"薯條搭配番茄醬,更配哦!"); } } interface FoodFactory { Food getFood(); } class HamburgerFactory implements FoodFactory { @Override public Food getFood() { return new Hamburger(); } } class FrenchFriesFactory implements FoodFactory { @Override public Food getFood() {
return new FrenchFries(); } } class Business { // 品嚐 public void taste(FoodFactory factory) { Food f = factory.getFood(); System.out.println("評委一:"); f.eat(); System.out.println("評唯一打分"); System.out.println("評委二:"); f.eat(); System.out.println(
"評唯二打分"); System.out.println("評委三:"); f.eat(); System.out.println("評唯三打分"); } } //=========================================================== class MexicoChicken implements Food { @Override public void eat() { System.out.println("墨西哥雞肉卷"); } } class MexicoChickenFactory implements FoodFactory { @Override public Food getFood() { return new MexicoChicken(); } } public class Test { public static void main(String[] args) { FoodFactory ff = new FrenchFriesFactory(); FoodFactory ff2 = new MexicoChickenFactory(); Business b = new Business(); b.taste(ff); b.taste(ff2); } } // 有疑惑: // 1. 既然,客戶端程式設計師,已經能擴展出新產品了,新產品是客戶端自己做的,客戶端程式設計師就可以直接使用自己的新產品類,而不用定義那個對應的工廠! // 2. 那為什麼我們還要“不辭辛苦”地去加對應的工廠呢???? // 3. 那麼,那個Business的taste方法,直接接受Food即可,這樣,就不要工廠了. // 好吧,工廠方法也有缺點: // 1. 增加了複雜度 // 2. 當有多種不同型別的產品時(產品等級) ,比如,現在加入飲料 , 會造成類特別多 // 3. 由此就引出了:抽象工廠設計模式, 下回分解

本文來自部落格園,作者:秋華,轉載請註明原文連結:https://www.cnblogs.com/qiu-hua/p/15227292.html