欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 8 设计模式之简单工厂模式

8 设计模式之简单工厂模式

2024/11/30 17:21:39 来源:https://blog.csdn.net/Theodore_1022/article/details/144075221  浏览:    关键词:8 设计模式之简单工厂模式

        设计模式是软件开发中的一套通用解决方案,而简单工厂模式则是最基础、最常用的一种创建型模式。在这篇博客中,我将为大家详细介绍简单工厂模式的概念、优缺点,以及通过一个饮料制作的案例,帮助大家更好地理解和应用这种模式。


一、简单工厂模式是什么?

        简单工厂模式是一种一个工厂类 根据传入的参数,动态决定创建哪种产品类实例的设计模式。虽然简单工厂不属于 GOF(四人帮)提出的23种设计模式之一,但它是工厂模式家族的重要成员。

1.简单工厂的组成:

  • 工厂类(Factory Class):
    提供创建具体产品的功能,负责封装实例化逻辑。
  • 抽象产品类(Product Interface/Abstract Class):
    定义产品的共性行为,是具体产品类的父类或接口。
  • 具体产品类(Concrete Product Classes):
    实现或继承抽象产品类,包含具体的产品功能。

2.简单工厂的优缺点:

优点:

  • 客户端无需关心对象的创建细节,只需通过工厂获取对象即可,符合 "单一职责原则"
  • 实现了对象的创建与使用分离。

缺点:

  • 增加新的产品时,工厂类需要修改逻辑,不符合 "开闭原则"(对扩展开放,对修改关闭)。
  • 工厂类的职责较重,可能造成类的复杂度增加。

二、案例:饮料制作工厂

1.需求描述:

        我们需要设计一个饮料制作工厂,可以根据用户需求制作不同类型的饮料,包括咖啡、茶水和果汁。用户输入饮料类型后,工厂动态创建对应的饮料对象,并执行制作方法。

2.具体代码

(1)抽象产品类:Drink

abstract class Drink {public abstract void make(); // 定义统一的制作方法
}

(2)具体产品类:CoffeeTeaJuice

public class Coffee extends Drink {@Overridepublic void make() {System.out.println("咖啡制作中");}
}public class Tea extends Drink {@Overridepublic void make() {System.out.println("茶水制作中");}
}public class Juice extends Drink {@Overridepublic void make() {System.out.println("果汁制作中");}
}

(3)工厂类:DrinkFactory

public class DrinkFactory {public static Drink createDrink(String type) {if ("咖啡".equalsIgnoreCase(type)) {return new Coffee();} else if ("茶水".equalsIgnoreCase(type)) {return new Tea();} else if ("果汁".equalsIgnoreCase(type)) {return new Juice();} else {throw new IllegalArgumentException("未知的饮料类型:" + type + "。请输入:咖啡、茶水或果汁!");}}
}

(4)测试类:SimpleFactoryTest

public class SimpleFactoryTest {public static void main(String[] args) {Drink coffee = DrinkFactory.createDrink("咖啡");coffee.make(); // 输出:咖啡制作中Drink tea = DrinkFactory.createDrink("茶水");tea.make(); // 输出:茶水制作中try {Drink unknown = DrinkFactory.createDrink("牛奶");unknown.make();} catch (IllegalArgumentException e) {System.out.println(e.getMessage());}}
}

(5)运行结果:

咖啡制作中
茶水制作中
未知的饮料类型:牛奶。请输入:咖啡、茶水或果汁!


三、案例解析与优化建议

1.封装逻辑:

        DrinkFactorycreateDrink() 方法封装了饮料对象的创建逻辑,客户端无需直接使用 new,只需传入饮料类型即可获得对应对象。

2.扩展性问题:

        如果需要添加新饮料,比如 "牛奶",需要修改工厂类的 createDrink() 方法逻辑。这违背了 开闭原则,但在简单需求下是可以接受的。

3.改进方向:

        使用枚举类型: 定义饮料类型为枚举常量,避免字符串硬编码导致错误。

        动态注册: 工厂可以设计为支持动态注册新产品,减少对代码的修改。


四、总结

        简单工厂模式是一种结构清晰、实现简单的设计模式,在开发中非常实用。它通过将对象的创建逻辑集中管理,使代码更具可读性和维护性。通过这次饮料制作工厂的实践,我们学会了如何应用简单工厂模式,完成了对象创建与业务逻辑的分离。

        你也可以试着实现自己的简单工厂,加入更多种类的饮料或者其它领域的场景!

        希望这篇博客能帮助到你。如果觉得有用,记得点赞、收藏哦!欢迎在评论区分享你的实现与想法! 😊


以上案例和博客内容由一次学习与实践经历整理而成,感谢每一次思考与成长!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com