Java设计模式——工厂方法模式(完整详解,附有代码+案例)

文章目录

    • 5.3 工厂方法模式
      • 5.3.1概述
      • 5.3.2 结构
      • 5.3.3 实现

5.3 工厂方法模式

针对5.2.3中的缺点,使用工厂方法模式就可以完美的解决,完全遵循开闭原则。

5.3.1概述

工厂方法模式:定义一个创建对象的接口(这里的接口指的是工厂),让子类(子类 指实现工厂接口的子类)决定实例化哪个产品类对象。工厂方法使一个产品类的实例化延迟到其工厂的子类。

5.3.2 结构

工厂方法模式的主要角色:

  • 抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过抽象工厂访问具体工厂(多态)的工厂方法来创建产品对象。
  • 具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
  • 抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。
  • 具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。

5.3.3 实现

使用工厂方法模式对5.2.3中的案列进行改进,类图如下:

在这里插入图片描述

// 咖啡抽象类
public abstract class Coffee {public abstract String getName();public void addMilk(){System.out.println("加奶...");}public void addSugar(){System.out.println("加糖...");}
}
============================================================//拿铁咖啡类 实现 抽象咖啡类接口public class LatteCoffee extends Coffee{@Overridepublic String getName() {return "拿铁咖啡";}
}
===========================================================// 美式咖啡类 实现 抽象咖啡类接口
public class AmericanCoffee extends Coffee{@Overridepublic String getName() {return "美式咖啡";}
}
===========================================================
// 定义咖啡工厂接口
public interface CoffeeFactory {public abstract Coffee creatCoffee();
}
========================================================// 创建拿铁咖啡工厂类 实现 咖啡工厂类接口
public class LatteCoffeeFactory implements CoffeeFactory{@Overridepublic Coffee creatCoffee() {return new LatteCoffee();}
}
==========================================================// 创建美式咖啡工厂类 实现 咖啡工厂类接口
public class AmericanCoffeeFactory implements CoffeeFactory {@Overridepublic Coffee creatCoffee() {return new AmericanCoffee();}
}
==========================================================//咖啡店类public class CoffeeStore {private CoffeeFactory coffeeFactory;public void setCoffeeFactory(CoffeeFactory coffeeFactory) {this.coffeeFactory = coffeeFactory;}public Coffee orderCoffee(){// 咖啡工厂来创建具体的咖啡Coffee coffee = coffeeFactory.creatCoffee();// 加配料coffee.addMilk();coffee.addSugar();return coffee;}}
====================================================public class ClientTest {public static void main(String[] args) {// 创建咖啡店类对象CoffeeStore coffeeStore = new CoffeeStore();//创建拿铁咖啡工厂,多态CoffeeFactory coffeeFactory = new LatteCoffeeFactory();//CoffeeFactory amerFactory  = new AmericanCoffeeFactory();coffeeStore.setCoffeeFactory(coffeeFactory);// 点咖啡Coffee coffee = coffeeStore.orderCoffee();System.out.println(coffee.getName());//输出:加奶...  加糖...  拿铁咖啡}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1540212.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

逆向中巧遇MISC图片隐藏

这道题比较有意思,而且因为我对misc并不是很熟悉,发现该题目将flag隐藏在图片的颜色属性,巧妙的跟踪到这些密文位置,拿下题目一血,还是很有参考学习意义的。(题目附件,私信发。) 1、…

openstack 2023.2 Bobcat 本地安装部署

一、系统环境 rootodoo16e-server:~# cat /etc/lsb-release DISTRIB_IDUbuntu DISTRIB_RELEASE22.04 DISTRIB_CODENAMEjammy DISTRIB_DESCRIPTION"Ubuntu 22.04.5 LTS"rootodoo16e-server:~# python3 --version Python 3.10.12rootodoo16e-server:~# pip --version …

基于YOLOv5s的无人机航拍输电线瓷瓶检测(附数据集与操作步骤)

本文主要内容:详细介绍了无人机航拍输电线瓷瓶检测的整个过程,从创建数据集到训练模型再到预测结果全部可视化操作与分析。 文末有数据集获取方式,请先看检测效果 现状 输电线路绝缘瓷瓶的检测主要依赖人工巡检。巡检人员需携带专业设备,攀…

亿级数据表多线程update锁表问题

目录 1、问题描述 2、原因分析 3、问题解决 1、问题描述 在pg数据库,某个业务,有一张数据表test,数据表结果如下: test(sjjbh,wlbid,gzmb,sfzg,zgsj,cjsj,xx...),这个表没有主键,会有很多重复数据。 tes…

Vue报错 ‘vite‘ 不是内部或外部命令,也不是可运行的程序或批处理文件

报错 vue-project0.0.0 dev vite‘vite’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。解决 第1步. 控制台输入 npm install -g create-vite第2步. 控制台输入 npm install -g vite第3步. 运行就ok啦

【HTTP】方法(method)以及 GET 和 POST 的区别

文章目录 方法(method)登录上传GET 和 POST 有什么区别(面试)区别不准确的说法 方法(method) 首行中的第一部分。首行是由方法、URL 和版本号组成 方法描述了这次请求想干什么,最主要的是&…

13 vue3之内置组件keep-alive

内置组件keep-alive 有时候我们不希望组件被重新渲染影响使用体验;或者处于性能考虑,避免多次重复渲染降低性能。而是希望组件可以缓存下来,维持当前的状态。这时候就需要用到keep-alive组件。 开启keep-alive 生命周期的变化 初次进入时:…

基于SpringBoot+Vue的私人牙科诊所管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

MySQL函数介绍--日期与时间函数(一)

我相信大家在学习各种语言的时候或多或少听过我们函数或者方法这一类的名词,函数在计算机语言的使用中可以说是贯穿始终,那么大家有没有思考过到底函数是什么?函数的作用又是什么呢?我们为什么要使用函数?其实&#xf…

模型案例:| 篮球识别模型

导读 2023年以ChatGPT为代表的大语言模型横空出世,它的出现标志着自然语言处理领域取得了重大突破。它在文本生成、对话系统和语言理解等方面展现出了强大的能力,为人工智能技术的发展开辟了新的可能性。同时,人工智能技术正在进入各种应用领…

CANopen开源库canfestival的移植

本文记录将CANopen开源库CANfestival移植到GD32F470单片机的过程。CANopen协议理解请参考博客:CANopen协议的理解-CSDN博客 CANfestival开源库下载链接 CSDN链接: https://download.csdn.net/download/heqiunong/89774627 官网链接:https:/…

HTML常见语法设计

HTML常见语法设计 1.HTML类和ID类id 2.HTML 响应式 Web 设计3.HTML5 语义元素4.HTML 字符实体5.HTML 编码(字符集) 1.HTML类和ID 类 对 HTML 进行分类(设置类),使我们能够为元素的类定义 CSS 样式。为相同的类设置相…

耐高温滑环的应用场景及市场前景分析

耐高温滑环是一种重要的电气连接装置,广泛应用于需要传递电力和信号的旋转设备中。随着工业技术的发展,对耐高温滑环的需求不断增加,尤其是在极端温度环境下的应用场合,耐高温滑环展现出其独特的优势。 耐高温滑环在工业自动化领…

第157天: 安全开发-Python 自动化挖掘项目SRC 目标FOFA 资产Web 爬虫解析库

案例一:Python-WEB 爬虫库&数据解析库 这里开发的内容不做过多描述,贴上自己写的代码 爬取数据 要爬取p标签,利用Beautyfulsoup模块 import requests,time from bs4 import BeautifulSoup#url"https://src.sjtu.edu.cn/rank/firm…

双十一好物狂欢派对,五款剁手超值好物分享

在这个全民狂欢的购物节,我们迎来了一年一度的双十一盛典。双十一不仅是一场双十一好物狂欢派对,更是我们表达对生活品质追求的最佳时机。无论是智能家电、时尚潮品、还是日常必备,每一件好物都蕴含着对美好生活的无限向往。今年的双十一&…

内控合规管理

内控合规管理 1.内控合规概述2.信息科技风险管理概述组织架构与指责管理内容 3.监督检查4.制度管理5.业务连续性管理6.信息科技外包管理7.分支机构管理 1.内控合规概述 在具体实践中,IT内控合规管理的领域包括:信息科技风险管理、监督检查、制度和公文管…

Postman如何测试WebSocket接口!

01、WebSocket 简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直…

rpm方式安装Mysql报错依赖冲突解决

使用rpm安装mysql时在安装到client包时报错依赖库冲突以及GPG密钥问题, 解决 1,下载 MySQL 的 YUM 存储库文件。 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 2,安装下载的 YUM 存储库文件。 sudo rpm -…

Excel lookup函数使用方法及案例说明

大家好,这里是效率办公指南! 🔍 在Excel中,LOOKUP函数是一个强大的工具,用于查找和返回数据。无论是从一列中查找对应的值,还是在数据表中进行复杂的查找,LOOKUP函数都能帮助我们快速找到所需的…

VScode 修改 cursor 键盘设置

vscode 中按下 ctrl K 后 ctrl s 打开键盘快捷键设置。 搜索光标 cursor 找到 cursorDown 以及对应需要修改的快捷键命令 右键 添加快捷键设置 修改即可 alt space 关闭win设置中的中英文切换 代码提示下移 selectPrevSuggestion 上移