简单工厂模式

devtools/2024/9/18 12:41:40/ 标签: 简单工厂模式, 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/devtools/7896.html

相关文章

5.1激光雷达跟随(冰达机器人)

5.1激光雷达跟随功能开发 5.1.1激光雷达跟随功能需求分析 在完成激光雷达跟踪之前,我们先来拆解一下功能。要实现跟随,首先需要确定跟随的目标,在这个例程中,我们使机器人根据离它最近的物体。周围物体的距离可以通过激光雷达测量…

Pytorch或Tensorflow 深度学习库安装 (简易版)

Tensorflow 2.X安装 0、 pytorch 支持 conda虚拟环境 cuda 和 cudnn1、创建conda环境2、测试GPU是否可用3、在机器上安装cuda 和 cudnnCUDA 安装cudnn 安装 0、 pytorch 支持 conda虚拟环境 cuda 和 cudnn 如果只用pytorch, 只需在虚拟环境安装cuda 和 cudnn即可&am…

二分查找的刷题笔记

leetcode题目 Easy档 704. Binary Search 35. Search Insert Position 2529. Maximum Count of Positive Integer and Negative Integer 278. First Bad Version 374. Guess Number Higher or Lower 3065. Minimum Operations to Exceed Threshold Value I 169. Majori…

Django老项目升级到新版本

手上有个 Django 老项目,一直跑得好好的,好几年没动过了,维护费收得正爽,没想到客户来了个新的运营人员,丢了个改动需求过来。我一看也没啥大改,就答应了。大意了。 问题 刚开始改,我这种老鸟…

vue中的inject和provide

在Vue中,provide 和 inject 是用来实现祖先组件向子孙组件传递数据的一种高级组件通信方式。provide 可以在祖先组件中定义数据,而 inject 可以在子孙组件中接收这些数据。这种传递方式不受组件层级限制,非常适合于跨多层级的组件通信。 用法…

《设计模式之美》第二章 总结

《设计模式之美》总结 第二章 面向对象编程范式 2.1 当我们在谈论面向对象时,我们在谈什么 2.1.1 面向对象编程和面向对象编程语言 面向对象编程语言: 1. 以类或对象作为组织代码的基本单元,并将封装、继承、抽象、多态4个特性作为代码的…

第65天:API攻防-接口安全WebPackRESTSOAPWSDLWebService

目录 思维导图 前置知识 案例一:WebService 类-Wsdl&ReadyAPI-SQL 注入 案例二:SOAP 类-Swagger&SoapUI&EXP-信息泄露 案例三:HTTP 类-WebPack&PackerFuzzer-信息泄露 思维导图 前置知识 RPC接口: 登录游戏时候登录账号…

高速公路信息化大会 | 云轴科技ZStack分享云原生超融合在高速公路行业的应用

近日,作为第二十六届高速公路信息化大会分论坛之一,由中国公路学会邀请、英特尔支持和协办《第四届英特尔智慧化方案助力高速新基建升级论坛》在合肥顺利召开。来自智慧交通建设领域的创新企业和技术专家共聚一堂,围绕改扩建高速公路提升和数…

spring boot3单模块项目工程搭建-上(个人开发模板)

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 🌊山高路远,行路漫漫,终有归途 目录 写在前面 上文衔接 常规目录创建 common目录 exception.handle目录 result.handle目录 controller目录 service…

flutter组件 InheritedWidget

InheritedWidget是 一个数据共享组件,它提供了一种在 widget 树中从上到下共享数据的方式,比如我们在应用的根 widget 中通过InheritedWidget共享了一个数据,那么我们便可以在任意子widget 中来获取该共享的数据! 官方说明&#…

左值引用与右值引用

目录 右值 与 左值 右值引用 右值引用的用处 move 引用折叠 forward 右值 与 左值 c11增加了一个新的类型,右值引用,记作:&& 。 ● 左值是指在内存中有明确的地址,我们可以找到这块地址的数据(可取地址…

基于spark进行数据分析的心力衰竭可视化大屏项目

基于spark进行数据分析的心力衰竭可视化大屏项目 项目背景 在当今的医疗领域,数据驱动的决策变得日益重要。心力衰竭作为常见的心血管疾病,其临床数据的分析对于改善患者治疗结果至关重要。本文将介绍如何利用Apache Spark进行大规模心力衰竭临床数据的…

react17+antd4.18 动态实现面包屑导航Breadcrumb-----需改善

1、已经定义好的全部的路由配置,需要是这种格式的,可以再加上关于icon的内容. const routerMap [{path: /home,breadcrumbName: Home,},{path: /page1,breadcrumbName: Page 1,children: [{path: /page1/page101,breadcrumbName: Page 101,children: […

计算机网络中的一些基本概念

ip地址:IP地址是ip协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。是用来区分主机的。 端口号:每个应用程序对应一个端口号,通过类似门牌号的端口号…

简介:Asp.Net Core进阶高级编程教程

课程简介目录 🚀前言一、课程背景二、课程目的三、课程特点四、课程适合人员六、最后 🚀前言 本文是《.Net Core进阶编程课程》教程专栏的导航站(点击链接,跳转到专栏主页,欢迎订阅,持续更新…&#xff09…

ICLR 2024 | FTS-Diffusion: 用于合成具有不规则和尺度不变模式的金融时间序列的生成框架

ICLR 2024 | FTS-Diffusion: 用于合成具有不规则和尺度不变模式的金融时间序列的生成框架 原创 QuantML QuantML 2024-04-17 09:53 上海 Content 本文提出了一个名为FTS-Diffusion的新颖生成框架,用于模拟金融时间序列中的不规则和尺度不变模式。这些模式由于其独…

【Linux】NFS网络文件系统搭建

一、服务端配置 #软件包安装 [roothadoop01 ~]# yum install rpcbind nfs-utils.x86_64 -y [roothadoop01 ~]# mkdir /share#配置文件修改 #格式为 共享资源路径 [主机地址] [选项] # [roothadoop01 ~]# vi /etc/exports /share 192.168.10.0/24(rw,sync,no_root_squash) #…

【大语言模型LLM】-使用大语言模型搭建点餐机器人

关于作者 行业:人工智能训练师/LLM 学者/LLM微调乙方PM发展:大模型微调/增强检索RAG分享国内大模型前沿动态,共同成长,欢迎关注交流… 大语言模型LLM基础-系列文章 【大语言模型LLM】-大语言模型如何编写Prompt?【大语言模型LL…

【数据结构】08排序

08 排序 1. 冒泡排序(BubbleSort)1.1 循环嵌套实现1.2 递归实现 2. 选择排序2.1 嵌套循环实现2.2 递归实现 3. 插入排序4. 希尔排序4.1 代码实现 5. 快速排序5.1 代码实现6. 归并排序6.1 递归实现6.2 循环实现 7. 堆排序7.1 构建大顶堆7.2 堆排序7.3 代码…

【大模型应用极简开发入门(2)】GPT模型简史:从GPT-1到GPT-4:从小数据量的微调到大数据量的强化学习不断优化模型

文章目录 一. GPT-1:无监督与微调1. 在GPT-1之前的监督学习的问题2. GPT-1中新的学习过程-无监督的预训练3. 复杂任务下的微调4. GPT-1为更强大的模型铺平了道路 二. GPT-2:context learning1. 核心思想:context learning2. GPT-2的数据集 三…