简单工厂模式

server/2024/9/18 12:40:21/ 标签: 简单工厂模式, java, 开发语言, 设计模式

工厂模式

这里以动物命名,
抽象动物:

java">public abstract class Animal {// 动物都要吃饭public abstract void eat();
}
java">public class Cat extends Animal{@Overridepublic void eat() {System.out.println("小猫吃猫粮");}
}
java">public class Cat extends Animal{@Overridepublic void eat() {System.out.println("小猫吃猫粮");}
}

抽象工厂:

java">public abstract class AnimalFactory {public abstract Animal createAnimal();
}
java">public class CatFacoty extends AnimalFactory{@Overridepublic Animal createAnimal() {return new Cat();}
}
java">public class DogFactory extends AnimalFactory{@Overridepublic Animal createAnimal() {return new Dog();}
}
java">public class FactoryTest {public static void main(String[] args) {AnimalFactory factory = new DogFactory();Animal animal = factory.createAnimal();animal.eat();AnimalFactory factory2 = new CatFacoty();Animal animal2 = factory2.createAnimal();animal2.eat();}
}

在这里,如果需要创建新的类,只需要新增animal的子类和factory的资料,不需要修改原来的代码,对扩展开放,符合开闭原则。

源码参考:

  • Collection.iterator
  • URLStreamHandler.createURLStreamHandler

经典代码


http://www.ppmy.cn/server/12838.html

相关文章

面包屑新玩法,ReactRouter+Ant Design实现动态渲染

在Ant Design中,可以通过Breadcrumb组件结合react-router库实现动态生成面包屑导航。具体步骤如下: 定义路由配置数据结构 我们需要在路由配置中添加额外的面包屑相关信息,例如面包屑标题、icon等。例如: const routes [{path: /,breadcrumbName: 首页},{path: /users,brea…

谷粒商城实战(017 业务-单点登录)

Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强 总时长 104:45:00 共408P 此文章包含第231p-第p235的内容 介绍 单点登录(Single Sign-On,SSO)是一种身份验证服务,允许用户使用一组凭…

Oracle删除数据库的步骤【谨慎操作】

在创建数据库的时候,有创建就会有删除,删除数据库的工作需要很多必要的条件 删除数据库会把所有库的数据文件、控制文件、日志文件等物理文件通通给删除掉!!!! 这时候你就可以跑路了。。。。。 1、模拟测试,创建一个测试库 -- 创建临时表空间 [root@cdp1 sql]#cat /d…

CSS基础:outline轮廓4个属性的详解

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端工具”,可获取 Web 开发工具合…

opencv android 使用笔记

目录 获取app路径: 下载:OpenCV-android-sdk cmakelist配置: 头文件路径: 编译报错:clang: error: linker command failed with exit code 1 (use -v to see invocation) 读取图片例子 保存mp4 获取app路径&am…

Docker Desktop打开一直转圈的解决办法

安装Docker Desktop之前确保你的Hyper-V已经打开 开启后需要重新安装重新安装重新安装这是最关键的一步,博主自己看了很多教程,最后试着重装了一下解决了 安装DockerDesktop的时候我的电脑根本就没有Hyper-V这个功能选项,可能是这个问题 如…

用html画一个四叶草

<!DOCTYPE html> <html lang"en" > <head> <meta charset"UTF-8"> <title>四叶草</title> <link href"" rel"stylesheet"> <link rel"stylesheet" href"css/style.css&q…

Redis(四) 主从、哨兵、集群环境搭建

结合前三期 Redis(一) Redis简介(Redis(一) Redis简介-CSDN博客) Redis(二) 可编程性(Redis(二) 可编程性-CSDN博客) Redis(三) 事务与发布订阅(Redis(三) 事务与发布订阅-CSDN博客) 目录 1.0 Redis主从 1.1 Redis 主从结构的基本原理和工作方式 1.2 Redis 主从结构的好处 …

OpenCV从入门到精通实战(九)——基于dlib的疲劳监测 ear计算

本文实现Python库d和OpenCV来实现眼部闭合检测&#xff0c;主要用于评估用户是否眨眼。 步骤一&#xff1a;导入必要的库和设置参数 首先&#xff0c;代码导入了必要的Python库&#xff0c;如dlib、OpenCV和scipy。通过argparse设置了输入视频和面部标记预测器的参数。 from…

【前端技术】HTML基础入门篇

1.1 HTML简介 ​ HTML&#xff08;HyperText Markup Language&#xff1a;超文本标记语言&#xff09;是一种标识性的语言。它包括一系列标签&#xff0e;通过这些标签可以将网络上的文档格式统一&#xff0c;使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组…

面试经典-Redis数据库的数据倾斜

一、定义 对于集群系统&#xff0c;一般缓存是分布式的&#xff0c;即不同节点负责一定范围的缓存数据。我们把缓存数据分散度不够&#xff0c;导致大量的缓存数据集中到了一台或者几台服务节点上&#xff0c;称为数据倾斜。一般来说数据倾斜是由于负载均衡实施的效果不好引起…

基于Google Gemini 探索大语言模型在医学领域应用评估和前景

概述 近年来&#xff0c;大规模语言模型&#xff08;LLM&#xff09;在理解和生成人类语言方面取得了显著的飞跃&#xff0c;这些进步不仅推动了语言学和计算机编程的发展&#xff0c;还为多个领域带来了创新的突破。特别是模型如GPT-3和PaLM&#xff0c;它们通过吸收海量文本…

C++笔记打卡第18天(vector、deque)

1.vector容器 vector数据结构和数组非常相似&#xff0c;也称为单端数组不同之处在于数组是静态空间&#xff0c;而vector可以动态扩展动态扩展&#xff1a;并不是在原空间之后需接新空间&#xff0c;而是找更大的内存空间&#xff0c;然后将原数据拷贝到新空间&#xff0c;释…

3.Python实战小项目—用Python将PDF文件转存为图片

3.Python实战小项目—用Python将PDF文件转存为图片 一摘要二个人简介三原理四流程五实战演示 一摘要 在Python中&#xff0c;将PDF文件转换为图片格式使用专门的库来处理PDF文档&#xff0c;并将其每一页导出为常见的图像格式。这可以通过PyMuPDF库中的fitz模块或pdf2image库实…

SpringBoot引入第三方jar包或本地jar包

idea2018创建spring boot项目 New Project窗口选择Spring Initializr Type选择Maven(Generate…),有两个Maven选择这一个。 勾选Spring Web。 pom.xml中version改成2.5.10。 在resources中新建jar目录&#xff0c;将第三方jar包fastjson2-2.0.47.jar放入其中。&#xff08…

如何排查oracle连接数不足问题

最近oracle数据库莫名其妙的连接不上&#xff0c;plsql连接报错&#xff0c;sqlplus终端打开时提示ora-00020错误&#xff0c;下面记录一下本次问题的解决过程。 1.sqlplus 登录数据库 show parameter processes;–当前默认配置的process是多少。 select count(*) from v$pr…

一份本金 能得两份利息?

构建完善的量化交易策略&#xff0c;需要了解多种交易标的。有的产品在特殊时间可以产生超额收益。 1天期的国债逆回购的手续费为万0.1。 看似较低&#xff0c;因为每笔最小手续费是0.1元&#xff0c;如果投资者买入的金额较小&#xff08;比如小于1w&#xff09;&#xff0c;…

nodejs npm 常用的命令

大家好&#xff0c;我是资深前端之路&#xff0c;以下是自己对npm命令的回顾梳理。喜欢的朋友记得点赞关注收藏哟&#xff01; npm npm init :生成package.json文件。 npm -v:查看npm版本号。 npm i:下载对应的文件包。npm i 下载包名版本号&#xff0c;可以下载制定的版本…

SQL-DML数据操纵语言(Oracle)

文章目录 DML数据操纵语言常见的字段属性字符型字段属性char(n)varchar2(n)/varchar(n) 数值型字段属性number([p],[s]int 日期型字段属性DATEtimestamp 如何查看字段属性增加数据INSERT快捷插入 删除数据DELETE修改数据UPDATE DML数据操纵语言 定义 是针对数据做处理&#xf…

项目开发的详细步骤(精华版)

项目开发是指从项目启动到项目交付的全过程&#xff0c;涵盖了需求分析、设计、编码、测试、部署等多个环节。以下为项目开发的详细步骤&#xff1a; 1. 项目启动与规划 项目立项 商业论证&#xff1a;分析项目投资回报率、风险、市场前景等&#xff0c;确定项目价值和可行性…