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

Java23种设计模式

定义:工厂方法模式的进阶,当一个工厂内包含多个小工厂的时候,负责接口分配问题。

直接看例子:

现在有一个需求造果篮,果篮分两部分组成:水果和篮子,需要建造工厂并打印出水果属性、吃法、果篮材质。

1.创造水果接口,提供方法tellMe,告知用户水果名称以及吃法。

interface Fruit{
        void tellMe();
    }

2.创建水果实现类:香蕉和苹果

static class Apple implements Fruit{
        @Override
        public void tellMe() {
            System.out.print("水果名为苹果\n");
            System.out.print("吃法为:削皮吃\n");
        }
    }
    static class Banana implements Fruit{
        @Override
        public void tellMe() {
            System.out.print("水果名为香蕉\n");
            System.out.print("吃法为:剥皮吃\n");
        }
    }

3.创造篮子接口,对外提供方法showBasket,告知篮子材质:

interface FruitBasket{
        void showBasket();
    }

4.创造篮子实现类:塑料篮子、竹篮子

static class Plastic_Basket implements FruitBasket{

        @Override
        public void showBasket() {
            System.out.print("用塑料篮子装\n");
        }
    }
    static class Bamboo_Basket implements FruitBasket{

        @Override
        public void showBasket() {
            System.out.print("用竹篮子装\n");
        }
    }

5.创造果篮接口,对外提供两个方法:获取Fruit以及获取FruitBasket:

interface Fruit_Box{
        Fruit getFruit();
        FruitBasket getFruitBasket();
    }
  1. 创建果篮实现类Fruit_Box_Factory,果篮为 苹果+竹篮:
static class Fruit_Box_Factory implements Fruit_Box{

        @Override
        public Fruit getFruit() {
            return new Apple();
        }

        @Override
        public FruitBasket getFruitBasket() {
            return new Bamboo_Basket();
        }
    }
  1. 创建工厂,完成需求:
public static void main(String[] args) {
        Fruit_Box box = new Fruit_Box_Factory();
        Fruit fruit = box.getFruit();
        FruitBasket basket = box.getFruitBasket();
        fruit.tellMe();
        basket.showBasket();
    }

打印:

水果名为苹果
吃法为:削皮吃
用竹篮子装

这里我们创造了Fruit_Box_Factory,调用者无须考虑内部到底使用了哪个水果(直接调用Fruit)无需考虑使用何种果篮(直接调用FruitBasket)达到解耦的目的。

与工厂方法模式的区别:

  1. 工厂方法模式一个工厂只包含一种产品(苹果),而抽象工厂模式生产的产品内部还包含多种产品(果篮=水果+篮子)。
  2. 工厂方法模式主要功能是创造一种产品(直接调用水果的接口),而抽象工厂模式主要功能是对一个产品族进行任务分发(通过抽象工厂的分配,分别调用水果的接口和篮子的接口)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值