工厂模式(一)

本文介绍了工厂模式如何通过分离类创建与使用,提升代码可维护性。通过 DrinkStore 和 DrinkFactory 的例子,展示了如何在需求变更时灵活调整。北京上海分店需求促使代码进一步优化,体现了工厂模式在复杂场景中的实用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


工厂模式

程序想要可以很好的维护,各个类的功能应该尽可能的解耦,每个类有自己的职能,这样当需要对代码进行变动的时候,不会“牵一发而动全身”,工厂模式就是为了解耦而分离。
**注意:**代码太多,我就不贴了,可以先直接划到底部,下载对应代码,之后对应文章食用更佳。

一、作用

将类的创建和类的使用分离,交给不同的类去执行,就是将类的创建工作交给工厂。

二、举例说明

1.需求说明

设计需求:
有一个DrinkStore类–>可以完成饮料的生产
一共生产三种饮料(继承于Drink)

  • LemonWater(柠檬水)
  • GreenTea(绿茶)
  • RedTea(红茶)

每种饮料的基本流程为:

  • 准备原材料 prepare
  • 搅拌 mixing
  • 打包 pack

2.普通代码书写

总体代码框图:
在这里插入图片描述
baseDrink是饮料的基类,其他类均继承他,除了prepare方法不同之外,其余方法与子类相同,每个子类覆盖父类的prepare方法。
重点看mian,代码使用时:

  1. 需要创建一个store
  2. 传入字符串以告诉store需要哪种饮料
public class main {
    public static void main(String[] args) {
        DrinkStore drinkStore = new DrinkStore();
        drinkStore.orderDrink("greenTea");
    }
}

DrinkStore的代码,可以看到该创建部分十分冗余。

public class DrinkStore {

    public baseDrink orderDrink(String type) {
        baseDrink drink=null;
        if (type.equals("greenTea")) {
            drink = new greenTea();
        } else if (type.equals("redTea")) {
            drink = new redTea();
        } else if (type.equals("lemonWater")) {
            drink = new lemonWater();
        }
        drink.prepare();
        drink.mixing();
        drink.pack();

        return drink;
    }
}

3.代码改进

专门创建一个drinkFactory去创建drink,也就是将创建类的委托给一个类去执行,这个类就是简单工厂,完成了类的创建和使用分离。

public class DrinkFactory {
    public baseDrink createDrink(String type) {
        baseDrink drink = null;
        if (type.equals("greenTea")) {
            drink = new greenTea();
        } else if (type.equals("redTea")) {
            drink = new redTea();
        } else if (type.equals("lemonWater")) {
            drink = new lemonWater();
        }
        return drink;
    }
}
public class DrinkStore {

    DrinkFactory drinkFactory;

    public DrinkStore(DrinkFactory drinkFactory) {
        this.drinkFactory = drinkFactory;
    }

    public baseDrink orderDrink(String type) {
        baseDrink drink = drinkFactory.createDrink(type);
        drink.prepare();
        drink.mixing();
        drink.pack();
        return drink;
    }
}
public class main {
    public static void main(String[] args) {
        DrinkStore drinkStore = new DrinkStore(new DrinkFactory());
        drinkStore.orderDrink("greenTea");
    }
}

4.需求变更

需要在北京和上海开两家分店,并且每家商店生产的drink在制造的时候,上海的要加入糖,北京的要加入盐(确实…很奇怪,但是就是为了举例子)。

baseDrink prepare() mixing() pack() BJGreenTea BJRedTea BJLemonWater SHGreenTea SHRedTea SHLemonWater DrinkFactory BJDrinkFactory SHDrinkFactory DrinkStore orderDrink() 提供drink

代码结构:
在这里插入图片描述
main中的内容:

public class main {
    public static void main(String[] args) {
    //这里通过多态 直接替换工厂和下面的字符串
    //就可以得到想要的实体类
        DrinkStore drinkStore = new DrinkStore(new BJDrinkFactory());
        drinkStore.orderDrink("greenTea");
    }
}

运行结果:
在这里插入图片描述

总结

说白了,工厂模式,就是将创建类委托给别人进行,这在类的初始化很麻烦的时候尤其有用。
整体代码下载:
链接:https://pan.baidu.com/s/1q-ylcKdw3WaBR5yoCGmsZA
提取码:dadx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值