Java设计模式之抽象工厂模式

针对工厂方法的问题,当有多个产品等级时(食物、饮料、甜品。。。) 工厂类就会很多。抽象工厂模式对该问题进行了优化。

抽象工厂的优点:

  • 仍然有工厂模式和简单工厂模式的优点。
  • 抽象工厂把工厂类的数量减少了,无论有多少个产品等级,工厂就一套。

抽象工厂的缺点:

  • 当产品等级(食物、饮料)发生变化时(增加产品等级,删除产品等级),都要引起以前工厂代码的修改(动一发牵全局),违反了ocp原则。

当产品等级比较固定时,可以使用抽象工厂。

package com.fjh.factory.simplefactory.abstractfactory;

interface Food{
    void eat();
}

interface Drink{
    void drink();
}

class Hamburger implements Food {

    @Override
    public void eat() {
        System.out.println("吃汉堡");
    }
}

class Cola implements Drink{

    @Override
    public void drink() {
        System.out.println("喝可乐");
    }
}

interface Factory{
    Food getFood();
    Drink getDrink(); //与工厂方法的最大区别之处(多个产品等级),因此得名抽象工厂。
}

class KFCFactory implements Factory {

    @Override
    public Food getFood() {
        return new Hamburger();
    }

    @Override
    public Drink getDrink() {
        return new Cola();
    }
}

class Rise implements Food {

    @Override
    public void eat() {
        System.out.println("吃饭");
    }
}

class XueBi implements Drink{

    @Override
    public void drink() {
        System.out.println("喝雪碧");
    }
}

class MFactory implements Factory {

    @Override
    public Food getFood() {
        return new Rise();
    }

    @Override
    public Drink getDrink() {
        return new XueBi();
    }
}

public class AbstractFactory {
    public static void main(String[] args){
        KFCFactory kfcFactory = new KFCFactory();
        Food food1 = kfcFactory.getFood();
        Drink drink1 = kfcFactory.getDrink();
        food1.eat();
        drink1.drink();
    }
}

posted @ 2021-08-12 18:07  fjhnb  阅读(55)  评论(0)    收藏  举报