找回密码
 立即注册
首页 业界区 业界 Java课堂|餐饮的本质(设计模式之工厂模式) ...

Java课堂|餐饮的本质(设计模式之工厂模式)

姜删懔 2025-6-6 19:53:15
前言

本文主要讲述工厂模式,文中使用通俗易懂的案例,使你更好的学习本章知识点并理解原理,做到有道无术。
一.什么是工厂模式

工厂模式是23种设计模式中创建型模式的一种,它是一个最简单的对象创建管理方式,根据调用方传递的类型来创建对象并返回。封装了对象创建的过程,降低了程序模块之间的耦合度。
二.生活中的工厂模式

1.沙县小吃

江帅记得沙县有炒饭、炒粉、云吞、馄饨、蒸饺、汤等各种各样的餐品,而你在沙县只需要告诉老板你想要什么并付款,老板会制作好相关的食物给到你,你不需要了解食物到底是怎么样制作出来的,只需要传递需求就能获取想要的东西,这就跟设计模式的工厂模式很相似。
1.png

2.金拱门(麦当劳)与开封菜(KFC)

麦当劳和肯德基是著名的快餐店,有诸多食品,比如汉堡。汉堡这个食物是由他们提供给我们的,而我们只需要告诉餐厅我们需要的是哪个汉堡并付钱就可以了,具体他们是怎么完成这个汉堡的,就不需要我们去考虑了,而这就像设计模式的工厂模式一样。
2.png

3.茶餐厅

这些茶餐厅也跟其他餐饮一样,你只需要告诉店员你想要的餐品并付款,后厨就能跟你的需求制作出你点的美食,你也无需关注它如何制作出来的,这也就跟设计模式的工厂模式很相似。
3.png

三.工厂模式的实现

接下来江帅以一家茶餐厅来举例,用工厂模式来实现。先创建一个抽象产品类食物类和两个具体产品类奶茶类和三明治类
  1. package com.qianfeng.ran
  2. /\*
  3. *   @author:江帅
  4. *
  5. *   抽象产品
  6. *        定义一个所有食物的抽象父类:食物类
  7. \*/
  8. public abstract class Food{
  9. //定义一个打印当前食物名的方法
  10. void pirntName();
  11. }
  12. /\*
  13. *   具体产品
  14. *        创建一个继承食物类的子类:奶茶类
  15. \*/
  16. class MikeTea extends Food{
  17. //重写父类的抽象方法
  18. public void printName(){
  19. System.out.println("奶茶");
  20. }
  21. }
  22. /\*
  23. *   具体产品
  24. *        创建一个继承食物类的子类:三明治类
  25. \*/
  26. class Sandwich extends Food{
  27. //重写父类的抽象方法
  28. public void printName(){
  29. System.out.println("三明治");
  30. }
  31. }
复制代码
再创建一个具体工厂,类似茶餐厅
  1. package com.qianfeng.ran
  2. /*
  3. * @author:江帅
  4. *       
  5. *         具体工厂
  6. *                定义一个工厂类:茶餐厅
  7. */
  8. public class TeaRestaurantFactory{
  9.         //定义一个根据需求返回具体食物对象的静态方法,类似厨房
  10.     public static Food kitchen(String type){
  11.         //判断传递进来的需求是否为 null ,为 null 则返回 null 对象
  12.             if(type == null){
  13.             return null;
  14.         }
  15.         //根据需求返回对应的食物对象
  16.         if("1".equals(type)){ //假设传递"1"为需要奶茶
  17.             //返回奶茶对象
  18.             return new MikeTea();
  19.         }else if("2".equals(type)){//假设传递"2"为需要三明治
  20.             //返回三明治对象
  21.             return new Sandwich();
  22.         }
  23.     }
  24. }
复制代码
最后通过工厂类(茶餐厅)调用对应的静态方法(厨房)并传递需求(字符串)获取对象(食物)
  1. package com.qianfeng.ran
  2. /*
  3. * @author:江帅
  4. *       
  5. *         客户端
  6. */
  7. public class Demo{
  8.     public static void main(String[] args){
  9.         //调用工厂类的静态方法,并传递字符串"1"获取奶茶对象
  10.         Food mikeTea = TeaRestaurantFactory.kitchen("1");
  11.         //执行结果:
  12.         //"奶茶"
  13.         System.out.println(mikeTea.printName());
  14.         //调用工厂类的静态方法,并传递字符串"2"获取三明治对象
  15.         Food sandwich = TeaRestaurantFactory.kitchen("1");
  16.         //执行结果:
  17.         //"三明治"
  18.         System.out.println(sandwich.printName());
  19.     }
  20. }
复制代码
四.配套视频

如果你不习惯阅读技术文章,或是对文中的技术概念不能很好地理解,可以来看看江帅帮你筛选出的视频教程。
与本文配套的Java学习视频,戳我直达
五.总结

在工厂模式中,咱们只需要传递需求给工厂类的方法,就能获取我们所需要的对象,从而降低类与类之间的耦合度,我们也无需了解类的创建过程和对象的创建过程,只需要关注对象的使用即可。
但是工厂模式有个弊端,就是每添加多一个具体产品类,则需要改动工厂类里的方法,这就违背了设计模式中的开闭原则。就像茶餐厅里多一个菜品时,我们就需要更新菜单。
下一章,我们将带大家学习企业的运行模式(设计模式之抽象工厂模式)。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册