让代码变美的第三天 - 简单工厂模式

Java重构的4大魔法:如何让团队代码“自动变美”? 🔥关注墨瑾轩,带你探索编程的奥秘!🚀🔥超萌技术攻略,轻松晋级编程高手🚀🔥技术宝库已备好,就等你来挖掘🚀🔥订阅墨瑾轩,智趣学习不孤单🚀🔥即刻启航,编程之旅更有趣🚀。 阅读详情

丑陋的模样

    public void sendApple() {
        Apple apple = new Apple();

        // 洗苹果 + 切苹果
        apple.wash();
        apple.cut();

        // 使用苹果:苹果送人
        sendPeople(apple);
    }

    public void eatApple() {
        Apple apple = new Apple();

        // 洗苹果 + 切苹果
        apple.wash();
        apple.cut();

        // 使用苹果:吃苹果
        eatPeople(apple);
    }

    public void eatPineapple() {
        Pineapple apple = new Pineapple();

        // 洗菠萝 + 切菠萝
        apple.cut();

        // 使用菠萝:吃菠萝
        eat(apple);
    }
  • 上面代码,两次使用苹果代码有部分重叠,代码冗余。
  • 虽然新增一种水果(荔枝)不会破坏开闭原则,但是代码过于分散,不便于管理、维护。

变美步骤

第一步 - 基本预期

思考:这种产品(苹果、菠萝)在使用上会不会很多(比如上面苹果使用了2次,菠萝使用了一次)?这类产品将来会不会新增?,比如:香蕉、荔枝…
如果使用的地方很多,而且将来还会不断新增,那么重构一下还是比较好的。

第二步 - 梳理核心逻辑

使用这类产品的时候是不是总是需要创建、初始化。比如;一个产品初始化的东西基本固定,比如苹果一定要先洗,再切,然后再能端出来卖。

第三步 - 重构

给这个产品抽象出一个父类,比如水果

public interface Fruit {
}
public class Apple implements Fruit {
    public void eat() {
        System.out.println("吃苹果");
    }
}
public class Pineapple implements Fruit {
    public void eat() {
        System.out.println("吃菠萝");
    }
}

定义产品工厂,把每个产品的定义+初始化的动作都完成之后,形成一个可使用的产品再交出去

    public static Fruit getFruit(String name) {
        if ("苹果".equals(name)) {
            Apple apple = new Apple();
            // 洗苹果 + 切苹果
            // todo other init
            return apple;
        } else if ("菠萝".equals(name)) {
            Pineapple pineapple = new Pineapple();
            // 切菠萝
            // todo other init
            return pineapple;
        } else {
            throw new RuntimeException("没有找到该水果");
        }
    }
  • 将来新增初始化动作,或者想把菠萝换成“黑凤梨”也不用到处去改之前使用的地方

使用

    public void sendApple() {
        Fruit apple = FruitFacory.getFruit("苹果");
        sendPeople(apple);
    }

    public void eatApple() {
        Fruit apple = FruitFacory.getFruit("苹果");
        eatPeople(apple);
    }

    public void eatPineapple() {
        Fruit pineapple = FruitFacory.getFruit("菠萝");
        eat(apple);
    }
  • 使用的时候不用管初始化动作了,直接拿来就是可以用的产品

破坏了开放封闭原则

确实是破坏了开放封闭原则,但是大多数业务代码中,我们新增一个产品的时候,大概率也需要改代码的,无非是改使用的地方,还是改工厂里面的【if else】,所以问题不大,但是这样改造之后,逻辑收敛,并且优化了重复的代码(初始化过程),对于管理维护来说还是比较划算的。
一般来说简单工厂是够用的,如果实在接受不了破坏了开闭原则,可以上【工厂方法模式】,但是它也有一些优缺点,如下:
优点:重复代码可以去掉,并且也满足开闭原则
缺点:代码变得很臃肿,未来新增产品的同时还会额外新增一个工厂,代码量变多了,同类产品没有一个地方进行统一管理(可读性、可维护性略差)

【C++动态规划】2919. 使数组变美的最小增量运算数|2030 给你一个下标从 0 开始、长度为 n 的整数数组 nums ,和一个整数 k 。 你可以执行下述 递增 运算 任意 次(可以是 0 次): 从范围 [0, n - 1] 中选择一个下标 i ,并将 nums[i] 的值加 1 。 如果数组中任何长度 大于或等于 3 的子数组,其 最大 元素都大于或等于 k ,则认为数组是一个 美丽数组 。 以整数形式返回使数组变为 美丽数组 需要执行的 最小 递增运算数。 子数组是数组中的一个连续 非空 元素序列。 示例 1: 输入:nums = [2,3,0,0,2], 阅读详情

相关推荐

DIC新手避坑指南:压缩实验中的应变测量常见错误与数据校验技巧

本文为DIC技术新手提供了压缩实验中应变测量的全面避坑指南。文章系统梳理了从试样尺寸录入、散斑质量到数据后处理中应变方向与符号混淆、数据插值对齐等常见错误,并分享了基于MATLAB的自动化数据校验与可视化对比技巧,帮助建立可靠的实验数据分析SOP,确保DIC测量结果的准确性。

weixin_29313423的博客 112

如何把丑的代码变美

这两个改进示例显示了如何通过使用Python的语言特性(如条件表达式和内置函数)来简化代码。这种重构不仅提高了代码的可读性和维护性,还能使代码更加符合Python的编程风格。在实际开发中,理解并运用这些技巧可以帮助开发者编写更高效、易于理解的代码。

少说,多做。 7113

动态对抗Zygisk-IL2CppDumper:Unity游戏安全新策略

本文深入探讨了对抗Zygisk-IL2CppDumper攻击的Unity游戏安全新策略。通过实时内存监控、动态混淆技术和异常行为检测体系,有效防止关键代码被动态提取。文章详细介绍了内存指纹系统、运行时混淆方案和五维特征模型等实用防御手段,帮助开发者提升游戏安全性。

weixin_29325955的博客 305

让代码变美的第四天 - 工厂方法模式

日常重构代码

帅东's Blog 511

Hypack 应用于地形测量的高级设置操作要领

Hypack 是业界公认最好的水文导航测量软件,是目前世界上应用广泛的专业测量疏浚软件。它能够接收,处理,存储和输出各种数据。Hypack支持绝大部分GPS,测深仪(国内如海鹰HY1603单波束测沙仪),多波束测深仪,旁扫声纳,涌浪补偿器,水位仪,验潮仪以及声速剖面仪。利用 Hypack 可以进行导航,单波束测量,多波束测量,旁扫测量以及疏浚实时监测等。软件界面友好,使用方便。本文简要阐述Hypack 应用于地形测量的几个重要操作要领。

中游鱼的博客 2793

从CT扫描到3D模型:手把手教你用NII文件在3D Slicer中重建脊柱(附Verse数据集实战)

本文详细介绍了如何利用NII文件在3D Slicer中从CT扫描数据重建脊柱3D模型的全流程,包括环境配置、数据获取、方向校准、结构分割和模型优化等关键步骤。通过Verse数据集实战演示,帮助医学从业者快速掌握医学图像处理技术,提升临床诊疗与教学效率。

weixin_42651281的博客 202

vscode如何找letax模板_一直努力却找不到变美思路?韩国新一代「整容模板」,教你如何提高美商、科学变美!...

不知道大家有没有关注最近热议的“新一代韩国整容模板”?韩国作为整容大国,基本上每隔一段时间都会有审美喜好的改变。这次,几位被奉为“新一代整容模板”的小仙女,分别是高允真、洪秀珠、宋智英▼乍一看,这三位的长相都非常符合当下高级简约的审美潮流~看脸型,都是非常标准的心形脸或者鹅蛋脸。脸部线条十分流畅平滑,没有突兀的凹陷或隆起▼全脸最宽的地方也都集中在颧骨位置。往下的脸型内收,给人一种温婉含蓄的美▼但是...

weixin_39561577的博客 237

VerilogEval实战指南:从基准测试到模型微调的全流程解析

本文提供了VerilogEval实战指南,详细解析了从基准测试到模型微调的全流程。VerilogEval是一个自动化、标准化的测试框架,用于客观评估大语言模型生成Verilog硬件代码的能力。文章涵盖了环境搭建、核心机制解析、利用其生成合成数据进行模型微调的策略,以及如何将其工程化集成到自动化评估流程中,为硬件设计领域的AI应用提供了完整的方法论。

yy01234的博客 1005

让代码变美的第一天 - 观察者模式

日常重构代码

帅东's Blog 6万+

PLC编程入门基础知识

PLC即为可编程逻辑控制器,实质是一种专用于工业控制的计算机,其硬件结构基本上与微型计算机相同。

SANRENYIXING的博客 2万+

实战复盘:纷玩岛(Livelab)候补订单微信支付协议的逆向与复现

通过本次对纷玩岛候补支付接口的分析,我们实现了一个脱离 App UI 的轻量级支付发起器。这不仅验证了其API的设计逻辑(Standby -> PrePayInfo 分层设计),也为后续的自动化监控或辅助抢票工具提供了支付环节的技术验证。技术本无罪,关键在于如何使用。理解这些底层协议,有助于我们写出更健壮的代码,也能在遇到线上支付问题时快速定位是业务层(API)问题还是通道层(微信)问题。

猫敷雪 795

让代码变美的第二天 - 策略模式

思考:这个功能,这个方法改动到底是不是很频繁,新增的判断逻辑(if else)将来会不会很频繁。如果当前功能不光有不同策略处理流程,还有共同的处理流程,那么可以把不同策略处理流程抽取出来,使用策略模式进行优化,共同的部分不在本文讨论范围内。判断当前功能是不是都是由一个策略值,来决定后面整体流程,并且每个流程都不太相同,这样容易想到可以使用策略模式来进行优化。给所有策略对应的处理流抽象成一个方法,取个名字,比如买水果。定义每个策略对应处理流程,比如买苹果、买香蕉。给策略进行定义,比如水果场景。

帅东's Blog 268

实现真正的「人机」对战:引入三方 AI 引擎

引入三方 AI 引擎 前边,我们实现了与云库对战的象棋游戏。这一节中,我们将开始实现真正的「人机」对战 — 人与手机 AI 之间对弈; 实现一套象棋 AI 工程浩大,这个工作我们后续文章会做一番介绍。现代软件工程并不主张每个人都「造轮子」,因此我们要有「站在巨人肩膀上」的小智慧。 本节概要 从 github 寻找开源中象引擎 梳理引擎接入的思路 寻找适合的开源中国象棋引擎 github 上有大...

tosmart的博客 982

终极JavaScript代码美化指南:让源码瞬间变美✨

还在为网站上单调的代码块而烦恼吗?想要让你的技术博客或文档看起来更专业吗?**JavaScript代码美化器**就是你的完美解决方案!这个轻量级、易用的工具能够自动为HTML页面中的源代码片段添加语法高亮,让代码阅读体验大幅提升。🚀 ## 🤔 为什么需要代码美化? 在技术文档、博客文章或教学材料中,代码的可读性至关重要。传统的纯文本代码块不仅单调,还容易让读者失去焦点。JavaScript

gitblog_00120的博客 627

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Prettier Plugin for TailwindCSS:让你的TailwindCSS代码瞬间变美

在前端开发中,代码的可读性和一致性至关重要。当使用TailwindCSS时,面对满屏的类名,开发者往往会遇到代码混乱、难以维护的问题。prettier-plugin-tailwindcss正是为了解决这一问题而生的Prettier插件,它能够自动按照最佳实践对TailwindCSS类名进行排序,让你的代码从混乱变为有序。 ## 项目简介 prettier-plugin-tailwindcss是

gitblog_00429的博客 731

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

LeetCode 2919 使数组变美的最小增量运算数

dp[i]:表示将数组nums的前i个元素变成美丽数组所需的最小操作次数。通过动态规划,我们可以高效地解决这个问题。动态规划的关键在于:定义合适的状态dp[i]。找到状态转移方程。初始化边界条件。返回最终结果。希望这篇博客能帮助你更好地理解这个问题的解法!如果你有任何疑问或需要进一步的解释,欢迎留言讨论。

qq_64604732的博客 808

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

按下去的效果_最全的5个护肤方法,是变美护肤的第一步,比天天敷面膜效果更好...

魔镜魔镜,我想变美变美变美。嘿,你不是白雪公主的后妈,当然不会有魔镜啦!想变美,就得靠自己!变美第一步靠的是正确护肤,分清5种肤质,效果比天天敷面膜更好!变美1:认清自己的肤质5种肤质:干性皮肤、油性皮肤、中性皮肤、敏感皮肤、混合性皮肤。变美2:不同肤质的护理要点最简单的皮肤保养,就是从分区护理开始,不同肤质的护理要点都各有不同,以下这些肤质的护理要点请注意。变美3:正确的护肤步骤最全最正确的护肤...

weixin_39634898的博客 76

卖出总数的一半又少8个_8个让你变美的小技巧,做到一半以上的都是女神!

有智有料有格调点击上方△蓝字可关注智大叔来源 | 智大叔(ID:Zdashu168)爱美之心,人皆有之。尤其对于女孩子来说,特别在意自己的外貌,希望自己变得美美的。出门前总会对着镜子左看右看,衣服换了一套又一套,直到自己满意了才会出门。其实,想要变美,不仅是靠化妆品或者衣服这些外在的物质,还要靠自身养成良好的习惯。以下8个变美的小技巧,看看你能做到几个?1多喝水多喝水对身体的健康确实有利...

weixin_35992880的博客 161

【生活】那个为你变美的女孩

今日与一久未谋面的学妹重拾联系,得知她与纠缠数载的男友已经分开。这个曾经的男友是我大学的同学,也是经由他我才认识的学妹。他们的故事充满了戏剧性,让人唏嘘。

非典型程序媛 1017

<h1>[特殊字符] 7天爆款必看!2025初春变美攻略,手把手教你从护肤到穿搭稳赢流量!</h1>

【代码】<h1>[特殊字符] 7天爆款必看!2025初春变美攻略,手把手教你从护肤到穿搭稳赢流量!</h1>

yylw_的博客 152

有什么事情坚持下来,整个人都会变美?

坚持做一些事情确实可以让我们的外貌和气质得到提升,从而让人感到更美丽。以下是一些能够帮助你变美的建议,这些都是根据搜索结果中提供的信息整理出来的。

2401_86436163的博客 474

告别裁剪烦恼:smartcrop.js如何让图片自动「变美」

在当今视觉驱动的数字世界中,图片裁剪往往是一个耗时且需要专业审美的过程。无论是社交媒体分享、网站设计还是移动应用开发,如何快速找到图片的最佳裁剪区域一直是困扰设计师和开发者的难题。smartcrop.js作为一款强大的内容感知图片裁剪工具,通过智能算法自动识别图片中的重要区域,让图片裁剪从此告别繁琐,轻松实现专业级效果。 ## 什么是smartcrop.js? smartcrop.js是一个基

gitblog_00986的博客 951

推荐项目:VideoBeautify - 让你的视频瞬间变美!

推荐项目:VideoBeautify - 让你的视频瞬间变美! VideoBeautifyWith this APP, you can do all kinds of professional optimising and beautifying to your videos项目地址:https://gitcode.com/gh_mirrors/vi/VideoBeautify 1、项目介绍 V...

gitblog_00051的博客 550

能让女生变美的十件事

1.读书   读书可以使人修心养性。读书是要静的,练气功也是要静的。读书就象在练气功,读书的时候你身心的气流、神韵就会随着书的韵律在飘游、流动。只要书是美丽的,“她”就会把你锻炼得美丽。人的美丽贵在内在气质的美丽。读书可以提高你的内在气质,读书可以使你美丽!这是浅易默化的,也是充满神奇的!所以读书是使你变得更美丽的第一大秘籍。   2.跑步   美人一般都好静,不喜欢运动。就是懒、怕吃苦。而人...

jiav_net的专栏 155

CSS3:网页变美指南

使用唯一目的:让网页美观一致

weixin_74889578的博客 1889

CSS学习——网页的变美指南

在使用外部样式表的情况下,可以通过改变一个文件来改变整个站点的外观,每个页面使用<link>标签链接到样式表。4.伪对象方式(如果有父级塌陷,并且同级元素也受到了影响,还可以使用伪对象方式处理,为父级标签添加伪类after,设置空的内容,并且使用clear:both;如果把盒子模型看作是一个生活中的快递,那么内容部分等同于你买的实物,内边距等同于快递盒子中的泡沫,边框等同于快递盒子,外边距等同于两个快递盒子之间的距离。标签选择器,选择的是页面上所有的这种类型的标签,经常描述的是“共性”,无法描述”个性“

Wangsian的博客 1109
上一篇: 让代码变美的第二天 - 策略模式
下一篇: 让代码变美的第四天 - 工厂方法模式
帅东
博客等级 码龄11年 676粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值