【Java设计模式】抽象工厂模式

模式定义

抽象工厂模式提供了一个接口,用于创建相关或者依赖对象的家族,而不需要指定具体的实现类

与工厂方法模式不同的是:
抽象工厂模式生产多类产品,而工厂方法模式生产一类产品

代码实现

定义一个食品工厂

public interface FoodFactory {
    Fruit createFruit();
    Fry createFry();
}

工厂方法模式这里只生产Fruit或者Fry其中之一
Fruit和Fry均为接口,根据依赖倒置原则,这里应该是接口而不是具体类,接口信息如下

public interface Fruit {
    void info();
}
public interface Fry {
    void info();
}

这里我要生产Fruit和Fry产品组合,则代码如下

/**
 * A组合食品工厂
 */
public class AFoodFactory implements FoodFactory{
    @Override
    public Fruit createFruit() {
        return new Apple();
    }

    @Override
    public Fry createFry() {
        return new Chips();
    }
}
/**
 * B食品组合
 */
public class BFoodFactory implements FoodFactory {
    @Override
    public Fruit createFruit() {
        return new Banana();
    }

    @Override
    public Fry createFry() {
        return new Cookie();
    }
}

其中生产的具体食品Apple、Chips、Banana、Cookie类如下

class Apple implements Fruit {
    @Override
    public void info() {
        System.out.println("我是苹果..");
    }
}


class Banana implements Fruit{

    @Override
    public void info() {
        System.out.println("我是香蕉..");
    }
}

class Chips implements Fry {
    @Override
    public void info() {
        System.out.println("我是薯片..");
    }
}


class Cookie implements Fry{

    @Override
    public void info() {
        System.out.println("我是饼干..");
    }
}

接下来看下如何使用

    public static void main(String[] args) {
        FoodFactory afood = new AFoodFactory();
        Fruit fruit = afood.createFruit();
        Fry fry = afood.createFry();
        fruit.info();
        fry.info();
    }
我是苹果..
我是薯片..

通过以上结果可以看出,我们这里并不知道具体是怎么创建苹果和薯片对象的,只需要调用对应工厂方法即可,这里就达到了解耦的目的,也更易于扩展

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值