当前位置: 首页 >  网技达人 >  Java课堂|餐饮的本质(设计模式之工厂模式)

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

导读:前言.本文主要讲述工厂模式 ,文中使用通俗易懂的案例,使你更好的学习本章知识点并理解原理,做到有道无术。.一.什么是工厂模式.工厂模式是23种设计模式中创建型模式.的一种,它是一个最简单的对象创建管理方式,根据调用方传递的类型来创建对象并返回。封装了对象创建的过程,降低了程序模块

前言

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

一.什么是工厂模式

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

二.生活中的工厂模式

1.沙县小吃

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

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

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

3.茶餐厅

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

三.工厂模式的实现

接下来江帅以一家茶餐厅来举例,用工厂模式来实现。先创建一个抽象产品类 食物类和两个具体产品类 奶茶类和三明治类

package com.qianfeng.ran
/\*

*   @author:江帅
*
*   抽象产品
*        定义一个所有食物的抽象父类:食物类

\*/
public abstract class Food{
//定义一个打印当前食物名的方法
void pirntName();
}

/\*

*   具体产品
*        创建一个继承食物类的子类:奶茶类

\*/
class MikeTea extends Food{
//重写父类的抽象方法
public void printName(){
System.out.println("奶茶");
}
}

/\*

*   具体产品
*        创建一个继承食物类的子类:三明治类

\*/
class Sandwich extends Food{
//重写父类的抽象方法
public void printName(){
System.out.println("三明治");
}
}

再创建一个具体工厂 ,类似茶餐厅

package com.qianfeng.ran
/*
 * @author:江帅
 *	
 * 	具体工厂
 *		定义一个工厂类:茶餐厅
 */
public class TeaRestaurantFactory{
	//定义一个根据需求返回具体食物对象的静态方法,类似厨房
    public static Food kitchen(String type){
        //判断传递进来的需求是否为 null ,为 null 则返回 null 对象
    	if(type == null){
            return null;
        }
        //根据需求返回对应的食物对象
        if("1".equals(type)){ //假设传递"1"为需要奶茶
            //返回奶茶对象
            return new MikeTea();
        }else if("2".equals(type)){//假设传递"2"为需要三明治
            //返回三明治对象
            return new Sandwich();
        }
    }
}

最后通过工厂类(茶餐厅)调用对应的静态方法(厨房)并传递需求(字符串)获取对象(食物)

package com.qianfeng.ran
/*
 * @author:江帅
 *	
 * 	客户端
 */
public class Demo{
    public static void main(String[] args){
        //调用工厂类的静态方法,并传递字符串"1"获取奶茶对象
        Food mikeTea = TeaRestaurantFactory.kitchen("1");
        //执行结果:
        //"奶茶"
        System.out.println(mikeTea.printName());
        //调用工厂类的静态方法,并传递字符串"2"获取三明治对象
        Food sandwich = TeaRestaurantFactory.kitchen("1");
        //执行结果:
        //"三明治"
        System.out.println(sandwich.printName());
    }
}

四.配套视频

如果你不习惯阅读技术文章,或是对文中的技术概念不能很好地理解,可以来看看江帅 帮你筛选出的视频教程。

与本文配套的Java学习视频,戳我直达

五.总结

在工厂模式中,咱们只需要传递需求给工厂类的方法,就能获取我们所需要的对象,从而降低类与类之间的耦合度,我们也无需了解类的创建过程和对象的创建过程,只需要关注对象的使用即可。

但是工厂模式有个弊端,就是每添加多一个具体产品类,则需要改动工厂类里的方法,这就违背了设计模式中的开闭原则。就像茶餐厅里多一个菜品时,我们就需要更新菜单。

下一章,我们将带大家学习企业的运行模式(设计模式之抽象工厂模式)。

内容
  • 最新消息,powershell,10多年的癌症被治好了!
    最新消息,powershell,
    2023-12-10
    问:癌症是指什么?.答:.powershell一直有个特性,它的管道会传递对象,请看:.‘abc’ | ForEach-
  • RocketMQ消费者是如何负载均衡的
    RocketMQ消费者是如何负载
    2023-12-09
    摘要:RocketMQ 支持两种消息模式:集群消费( Clustering )和广播消费( Broadcasting )
  • 2分钟快速上手流水线的创建与运行
    2分钟快速上手流水线的创建与运行
    2023-12-09
    摘要: 通过流水线新手体验模板,体验一条含代码检查、构建阶段、部署发布常用流水线的创建与执行。.本文分享自华为云社区《2
  • Three.js教程:对象克隆、复制
    Three.js教程:对象克隆、
    2023-12-08
    推荐:将 NSDT场景编辑器 加入你的3D工具链.其他系列工具: NSDT简石数字孪生.对象克隆.clone()和复制.
  • FlashDuty Changelog 2023-09-07 | 新增深色模式与主题配置
    FlashDuty Change
    2023-12-04
    FlashDuty:一站式告警响应平台,前往此地址免费体验!.FlashDuty.现在已经全面支持了深色模式,这为您提供
  • 智能智能保健设备
    智能智能保健设备
    2023-10-04
    智能保健设备产品介绍.产品概述.我们的智能保健设备结合了最新的智能技术和保健功能,旨在帮助用户监控和**自身的健康状况。
  • 智能智能娱乐设备
    智能智能娱乐设备
    2023-10-04
    产品功能介绍.1. 智能娱乐设备.我们的智能娱乐设备是一款结合了智能技术和娱乐功能的产品。它拥有丰富的娱乐资源,包括音乐
  • ***容量规划与扩展服务
    ***容量规划与扩展服务
    2023-10-02
    ***容量规划与扩展服务.产品功能.我们的服务器容量规划与扩展服务旨在帮助客户有效地规划和扩展其服务器容量,以满足不断增
  • 数据分析和挖掘软件
    数据分析和挖掘软件
    2023-10-01
    数据分析和挖掘软件.产品功能.我们的数据分析和挖掘软件提供了丰富的功能,能够帮助用户快速有效地实现数据分析和挖掘,包括数
  • 智能手机
    智能手机
    2023-10-01
    产品功能介绍:智能手机.智能手机是一款集通讯、娱乐、办公等功能于一体的移动智能设备。首先,智能手机具有强大的通讯功能,支
  • 电子元件连接器
    电子元件连接器
    2023-10-02
    电子元件连接器.产品功能.电子元件连接器是一种用于连接不同电子元件的重要组件。它可以提供可*的电气连接,从而实现各种电子
  • *****与保养服务
    *****与保养服务
    2023-10-02
    *****与保养服务.产品介绍.我们的服务器维护与保养服务是为了帮助企业解决***运行过程中出现的各种问题,确保服务器的
  • 智能智能安防设备
    智能智能安防设备
    2023-10-05
    产品介绍.我们的智能安防设备是一款结合了最新科技和人性化设计的智能家居产品。它不仅拥有传*安防设备的监控功能,还具备智能
  • 智能医疗设备
    智能医疗设备
    2023-10-02
    智能医疗设备产品介绍.智能医疗设备是一款集成了先进技术的高科技产品,旨在提高医疗保健的效率和质量。该设备主要应用于医院、
  • ***性能优化服务
    ***性能优化服务
    2023-10-02
    ***性能优化服务.我们的服务器性能优化服务是针对企业和个人用户的***性能提升及优化解决方案。无论您是在使用自己的服务