首页 > 编程语言 > 详细

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

时间:2021-09-05 19:45:37      阅读:10      评论:0      收藏:0      [点我收藏+]

 

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)工厂方法设计模式

原文:https://www.cnblogs.com/qiu-hua/p/15227292.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!