设计模式(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. 由此就引出了:抽象工厂设计模式, 下回分解

 设计模式(9):JAVA(9):设计模式(2)工厂模式:提供了一种创建对象的最佳方式(2)工厂方法设计模式

 

设计模式(9):JAVA(9):设计模式(2)工厂模式:提供了一种创建对象的最佳方式(2)工厂方法设计模式

上一篇:Python3+ssl实现加密通信


下一篇:python中对日期对象的处理