设计模式-简单工厂

设计模式-简单工厂

简单工厂模式是一个集中管理对象创建,并根据条件生成所需类型对象的设计模式,有助于提高代码的复用性和维护性,但可能会导致工厂类过于复杂且违反开闭原则。

抽象提取理论:

  1. 封装对象创建过程
  2. 解耦客户端与产品类
  3. 控制程序扩展性

代码需求:需要实现一个计算器功能,输入运算符号和两个数字进行计算。你应该如何实现呢?

简单工厂实现

代码结构图

在这里插入图片描述

  • 基类:运算类
  • 实现类:加法类,乘法类,减法类,除法类
  • 工厂类:简单工厂类

基于代码结构图实现代码,以下代码只创建两个实现类。

基类:

/**
 * 运算类-基类
 */
public abstract class Operation {
    /**
     * 计算方法
     */
    abstract double getResult(double num1,double num2);
}

实现类-加法:

public class Addition extends Operation{
    @Override
    double getResult(double num1, double num2) {
        return num1 +  num2;
    }
}

实现类-减法:

public class Subtraction extends Operation{
    @Override
    double getResult(double num1, double num2) {
        return num1 - num2;
    }
}

工厂类:

public class Factory {
    public Operation createOperate(String str){
        switch (str){
            case "+":
                return new Addition();
            case "-":
                return new Subtraction();
            default:
                return null;
        }
    }
}

客户类:

public class FactoryDemo {
    public static void main(String[] args) {
        // 创建工厂
        Factory factory = new Factory();

        Operation operate = factory.createOperate("+");
        System.out.println("加法计算结果:" + operate.getResult(10, 10));

        Operation operate2 = factory.createOperate("-");
        System.out.println("减法计算结果:" + operate2.getResult(10, 10));
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes网络模型概述

Kubernetes网络模型设计的一个基础原则是:每个Pod都拥有一个独立的IP地址,并假定所有Pod都在一个可以直接连通的、扁平的网络空间中。所以不管这些Pod是否运行在同一个Node中,都要求它们可以直接通过对方的IP进行访问。由于Kubernetes的网络模…

基于Docker的Nginx的安装与配置

基于Docker的Nginx的安装与配置 1 为Nginx创建一个容器1.1 学习docker run1.2 通过docker run为Nginx创建并启动一个容器 2 配置Nginx2.1 学习docker的bind mount技术2.2 在Nginx容器中找到想修改的文件所在的目录2.2.1 认识nginx.conf文件2.2.2 访问Nginx服务,默认…

Adobe Acrobat Reader - 老牌PDF编辑器

【应用名称】:Adobe Acrobat Reader - 老牌PDF编辑器 【适用平台】:#Android 【软件标签】:#Adobe 【应用版本】:24.1.0 【应用大小】:482MB 【软件说明】:软件升级更新。用户将有权在手机、平板电脑…

cesium内部相同坐标在不同高度的2个点的属性机制坐标会gltf模型角度值异常问题mars3d的处理办法

模型一直向上运动的正常效果: 问题场景: 1.new mars3d.graphic.ModelPrimitive({使用addDynamicPosition(设置并添加动画轨迹位置,按“指定时间”运动到达“指定位置”时发现,如果是同一个点位不同高度值的y轴竖直向上方向的运动…

yolov8实战第六天——yolov8 TensorRT C++ 部署——(踩坑,平坑,保姆教程)

C 结合 TensorRT 部署深度学习模型有几个关键优势,这些优势在各种工业和商业应用中极其重要: 高效的性能:TensorRT 通过优化深度学习模型来提高推理速度,减少延迟。这对于实时处理应用(如视频分析、机器人导航等&#…

老旧小区智慧用电改造方案

【摘要】: 老旧居民小区火灾事故远高于其他场所,而且易造成人员伤亡,随着居民生活水平提高,不断添加各种电气设备,火灾风险逐步加大,智慧用电安全监管平台能够准确全天候地监测线路中的漏电、电流、温度等变…

如何让工业机器视觉呈现更清晰的图像?

清晰度是机器视觉的关键要素,它直接影响后续图像处理和分析的准确性。为了获取更清晰的图像,可以从以下几个方面着手: 1.优化相机设置:曝光时间和增益等参数的调整对图像清晰度有显著影响。通过精确控制这些参数,可以…

【Python】模块

🚩 WRITE IN FRONT 🚩 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…

STC8H8K蓝牙智能巡线小车——1. 环境搭建(基于RTX51操作系统)

1. 基本介绍 开发环境准备:Keil uVision5 烧录软件:STC-ISP(V6.92A) 芯片: STC8H8K64U-45I-LQFP64 芯片引脚: 2.创建项目 打开Keil,点击【Project】,选择【new uVersion proje…

React入门 - 07(说一说 JSX 中的语法细节)

本章内容 目录 1、js 表达式2、列表渲染3、条件渲染4、className5、jsx 中的样式处理6、dangeouslySetInnerHTML7、htmlFor8、使用 jsx 的注意事项 上一节内容我们完成了一个简单的TodoList案例。到现在为止我们已经知道怎么在 JSX中使用 “js 表达式”和”列表渲染“了&#…

跟随chatgpt学习如何使用GLSL进行简单的图形渲染

1. 准备一个HTML文件&#xff1a;创建一个新的HTML文件&#xff0c;将 HTML 文件命名为 index.html&#xff0c;并添加一个用于显示图形的<canvas>元素。 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>Simple We…

基于springboot的美食分享平台(程序+数据库+文档)

&#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目 希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;一、研究背景 1.1 课题背景 二…

合适的索引顺序

一.前言 正确的顺序依赖于使用索引的查询,并且同时需要考虑如何更好地满足排序和分组的需要。因为哈希或者其他类型的索引并不会像 B-Tree索引一样顺序存储数据,所以这里只针对B-Tree展开讨论。 二.合适的索引顺序 1. 概念 对于如何选择索引顺序有一个经验法则: 将选择性最…

【驱动】TI AM437x(内核调试-06):网卡(PHY和MAC)、七层OSI

1、网络基础知识 1.1 七层OSI 第一层:物理层。 1)需求: 两个电脑之间如何进行通信? 具体就是一台发比特流,另一台能够收到。于是就有了物理层:主要是定义设备标准,如网线的额接口类型、管线的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流,就是从1/0…

C++设计模式(李建忠)笔记1

C设计模式&#xff08;李建忠&#xff09; 本文是学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。 参考链接 Youtube: C设计模式 Gtihub源码与PPT&#xff1a;https://github.com/ZachL1/Bilibili-plus 豆瓣: 设计模式–可复用面向对象软件的基础 文章目录 C设计模…

WSL deepin的开荒之路

WSL deepin的开荒之路 问题1:sudo apt-get install ***报错无法定位包&#xff08;Unable to locate package&#xff09;问题2&#xff1a;如果在子系统中访问windows下的其他分区 windows11安装deepin直通车https://editor.csdn.net/md/?articleId135648217 问题1:sudo apt…

企业网盘:实现文件共享与协同办公的利器

企业网盘无疑是当下热门的信息管理工具&#xff0c;集存储、管理和协作功能于一体&#xff0c;以其高性价比、便捷易用、高效安全等特质&#xff0c;捕获各行各业的青睐。一跃成为2023年度大热的企业工具之一。 那么企业网盘究竟有何种魅力呢&#xff1f;换而言之&#xff0c;对…

解析Transformer模型

原文地址&#xff1a;https://zhanghan.xyz/posts/17281/ 进入Transformer RNN很难处理冗长的文本序列&#xff0c;且很容易受到所谓梯度消失/爆炸的问题。RNN是按顺序处理单词的&#xff0c;所以很难并行化。 用一句话总结Transformer&#xff1a;当一个扩展性极佳的模型和一…

STM32——ADC知识总结及多通道采样实验

1.ADC概念 ADC&#xff0c;全称&#xff1a;Analog-to-Digital Converter&#xff0c;指模拟/数字转换器 2 STM32各系列ADC的主要特性 3.F4框图 4.转换序列与转换时间 A/D转换被组织为两组&#xff1a;规则组&#xff08;常规转换组&#xff09;和注入组&#xff08;注入…

JNI笔记

JNI笔记 背景Demo代码JNI.javaMainActivity.javaAndroid.mkApplication.mkcom_stone_javacallc_JNI.hjavacallc.cbuild.gradle 背景 Demo代码 代码结构 JNI.java package com.stone.javacallc;/*** Created by stoneWang* Created on 2024/1/16* java调用C*/ public class …