美文网首页
工厂方法模式 ~ 设计模式之五

工厂方法模式 ~ 设计模式之五

作者: 喏喏2021 | 来源:发表于2022-01-11 15:26 被阅读0次

1. 背景

我们接着上次做饭的例子来说,现在宝贝忽然说是对西餐感兴趣,像什么罗宋汤,意面等。这时可能妈妈还不太会做,
妈妈说,叫你爸学,他有空,啊,这还可以,不但自己不学,还全部交给了老爸,可以的。
老爸也没有办法,既然宝贝要吃,怎么着你也得弄呀,好吃不好吃,得先整出来。
细心的你可以发现这些细节:

  1. 爸爸做这个西餐时,可能不能求助于妈妈的帮助,妈妈没空,可能也没有经验
  2. 如果妈妈不在家,既然爸爸做的不好吃,也可以将就填饱肚子
  3. 要做好多菜时,爸爸妈妈可以各做各的,还可以各自创意改造

2. 相关角色

工厂方法模式呢,大概包含以下4个角色:
1)抽象工厂(Abstract Factory)
爸妈都有做饭的基本能力,都可以完成各自饭菜的制作
2)具体工厂(ConcreteFactory):
这个实际爸爸做饭,或是妈妈做饭的过程
3)抽象产品(Product):
可以吃的美味食物
4)具体产品(ConcreteProduct):
实际的菜名,比如妈妈做的红烧肉,清蒸鲈鱼,爸爸做的西餐罗宋汤、意面等。

3. 代码实现

public class FactoryMethodPatternTest {
    //食物抽象类
    public static abstract class Food {
        public String name;
        public abstract void eat();
    }
    
    //清蒸鲈鱼鱼具体产品
    public static class FishFood extends Food {
        public FishFood(String name) {
            this.name = name;
        }
        @Override
        public void eat() {
            System.out.println("享受美味的" + name);         
        }
    }
    
    //罗宋汤
    public static class RussianSoupFood extends Food {
        public RussianSoupFood(String name) {
            this.name = name;
        }
        @Override
        public void eat() {
            System.out.println("享受美味的" + name);         
        }
    }
    //抽象工厂
    interface FoodFactory {
        public Food getFood();
    }
    //中餐
    public static class ChineseCuisineFood implements FoodFactory{
        @Override
        public Food getFood() {
            // TODO Auto-generated method stub
            return new FishFood("清蒸鲈鱼");
        }
    }
    //西餐
    public static class WesternCuisineFood implements FoodFactory {

        @Override
        public Food getFood() {
            return new RussianSoupFood("罗宋汤");
        }
    }
    
    public static void main(String[] args) {
        //我们做中餐来吃
        FoodFactory ff1 = new ChineseCuisineFood();
        Food f1 = ff1.getFood();
        f1.eat();
        //我们做西餐来吃
        FoodFactory ff2 = new WesternCuisineFood();
        Food f2 = ff2.getFood();
        f2.eat();
    }
}

4. 优点

  1. 我们不能将做饭的过程放在一个人身上,可以相互分担一下
  2. 各自负责自己的事情,可能做得更加细致清楚一点

5. 缺点

  1. 宝贝想要吃什么,可能要想一下,是爸爸来做,还是妈妈来做

相关文章

网友评论

      本文标题:工厂方法模式 ~ 设计模式之五

      本文链接:https://www.haomeiwen.com/subject/tpibcrtx.html