做面包有哪些网站知乎广西自治区集约化网站建设要求

news/2025/9/24 8:27:56/文章来源:
做面包有哪些网站知乎,广西自治区集约化网站建设要求,具有价值的响应式网站,各种广告图片大全简单工厂模式#xff08;Simple Factory Pattern#xff09;是一种创建型设计模式#xff0c;其主要目的是用于创建对象的实例。这种模式通过封装创建对象的代码来降低客户代码与具体类之间的耦合度。简单工厂不是GoF#xff08;四人帮#xff09;设计模式之一#xff0c… 简单工厂模式Simple Factory Pattern是一种创建型设计模式其主要目的是用于创建对象的实例。这种模式通过封装创建对象的代码来降低客户代码与具体类之间的耦合度。简单工厂不是GoF四人帮设计模式之一但它是一个常用的编程惯用法。 在简单工厂模式中创建对象的责任通常由一个单一的工厂类承担这个工厂类有一个用来根据输入参数创建并返回不同类型对象实例的方法。这种模式通常用于管理和创建那些具有共同接口或父类的一组类的实例。 目录 一、业务案例 二、简单实现 三、简单工厂模式 3.1 面向对象编程 3.1.2 接口 3.1.2 面向接口编程 3.2 不用设计模式解决 3.3 用简单工厂模式解决 3.3.1 工厂模式结构及说明 3.3.2 模式分解 3.3.3 理解简单工厂模式 3.4 简单工厂模式优缺点 3.5 思考简单工厂模式 3.5.1 本质 3.5.2 何时选用简单工厂模式 3.6 相关设计模式结合 一、业务案例 请用程序实现输入两个整数和运算符然后输出结果。 二、简单实现 两三下就搞定代码如下 import java.util.Scanner;public class Tester {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int a scanner.nextInt();int b scanner.nextInt();String c scanner.nextLine().trim();scanner.close();switch (c) {case : {System.out.println(a b);return;}case -: {System.out.println(a - b);return;}case *: {System.out.println(a * b);return;}case /: {if (b 0) {return;}System.out.println(a / b);return;}default: return;}} } 正常运行看结果看似没有什么毛病但阅读一下代码就实在不康入目 看不懂变量abc代码什么意思。好多判断。如果第一次和第二次输入符号会出错 等等。 把以上问题全部解决就行了么当然不行Java是面向对象编程。 三、简单工厂模式 3.1 面向对象编程 面向对象编程是一种基于对象和类的编程方法它将数据和操作数据的方法封装在一起以创建对象。在Java中你可以通过类、对象、封装、继承和多态来构建复杂的软件系统。这些概念使得代码更具可维护性、可重用性和扩展性是Java编程语言的重要特征之一。 3.1.2 接口 Java中的接口是一种抽象数据类型它定义了一组方法的规范但没有提供方法的具体实现。接口可以被类实现一个类可以实现一个或多个接口。 在Java中通过使用interface关键字来声明接口。接口的方法默认是public和abstract的也就是说接口中的方法必须是公共的和抽象的不需要显式地声明这两个修饰符。 接口可以包含以下类型的成员 抽象方法接口中的方法没有方法体只有方法签名。默认方法在Java 8中引入的默认方法在接口中有一个具体的实现。实现类可以直接继承默认方法也可以选择覆盖它们。静态方法在Java 8中引入的接口中的静态方法可以通过接口名称直接调用无需通过实现类。常量接口中可以定义常量它们默认是public、static和final的。 接口的主要作用是实现多继承或多重实现。通过实现接口一个类可以同时拥有多个接口定义的行为并且可以在不同的类之间共享和重用代码。一个类可以实现多个接口但只能继承一个类。 3.1.2 面向接口编程 Java面向接口编程是一种编程思想和重要的原则它强调程序设计应该以接口为基础进行。这种编程方式的关键思想是将接口作为代码组织和交互的核心而不是将具体的实现细节暴露给调用者。 在面向接口编程中接口是一种契约它定义了一组方法的规范。类可以实现接口以表明它们能够提供接口中定义的行为。通过使用接口可以减少代码之间的耦合性并提高代码的可读性、可维护性和可扩展性。       面向接口编程的优点包括 扩展性通过定义接口可以方便地添加新的实现类从而提供更多的功能扩展点。可替换性由于面向接口编程的关注点是接口而不是具体实现所以可以方便地替换实现类以满足不同的需求和场景。可测试性接口的抽象性使得可以更容易地对代码的不同部分进行单元测试和模拟。代码复用性通过多个类实现同一个接口可以实现代码逻辑的复用。降低耦合性通过依赖于接口而不是具体的实现类可以降低代码之间的耦合性提高系统的灵活性和可维护性。 在实践中面向接口编程可以结合工厂模式来进一步提高代码的可扩展性和灵活性。在Java 程序设计里面非常讲究层的划分和模块的划分每层之间只通过接口来通信而不需要知道具体的实现。 总的来说接口提供了一种规范和契约的机制用于定义类应该实现的方法以及类们之间的协议。 3.2 不用设计模式解决 结构图如下 代码实现如下 接口 /*** 运算接口 br/** author danci_* date 2024/1/13 11:13:00*/ public interface CalApi {/*** 根据传入的两个数字和运算符获得运算结果** param number1 数字1* param number2 数字2* param operator 运算符* return*/int cal(int number1, int number2, String operator); }实现类 /*** 运算实现类 br/** author danci_* date 2024/1/13 11:14:46*/ public class CalApiImpl implements CalApi {Overridepublic int cal(int number1, int number2, String operator) {switch (operator) {case : {return number1 number2;}case -: {return number1 - number2;}case *: {return number1 * number2;}case /: {if (number2 0) {return 0;}return number1 / number2;}default: return 0;} } } 客户端实现 public class Client {public static void main(String[] args) {CalApi calApi new CalApiImpl();calApi.cal(1, 2, );} } 问题 客户的这行代码 CalApi calApi new CalApiImpl()客户端不仅知道了接口还知道了接口具体的实现违背面向接口编程的思想。 使用工厂模式来解决问题。 3.3 用简单工厂模式解决 定义⼀个创建对象的接口让其子类⾃己决定实例化哪⼀个工厂类⼯厂模式使其创建过程延迟到⼦子类进⾏。 解决思路 客户端不应该知道具体的实现类只知道接口又不应该知道具体的实现来满足业务该怎么办而创建接口又是需要知道实现类的。 创建一个工厂类由工厂类来实例化接口对外提供能获取接口的实例对象然后就可以操作接口的方法了。 客户端通过工厂类来获取接口对象来调接口对应的方法。如此实现了客户端不需要知道具体的接口实现了。 3.3.1 工厂模式结构及说明 Api定义客户所需要的功能接口。 Impl具体实现Api 的实现类可能会有多个。 Fact ory: 工厂选择合适的实现 类来创建Api 接又对象。 Client:客户端通过Factory 来获取Api接又对象然后面向Api接又编程。 代码实现如下 定义接口代码如下 public interface CalApi {/*** 根据传入的两个数字进行运算** param number1 数字1* param number2 数字2* return*/int cal(int number1, int number2); } 运算实现类代码如下 public class AdditionCalApi implements CalApi {/*** 获取数字number1 数字number2的结果* * param number1 数字1* param number2 数字2* return int 加法运算结果*/Overridepublic int cal(int number1, int number2) {return number1 number2;} } public class SubtractionCalApi implements CalApi {/*** 获取数字number1 - 数字number2的结果** param number1 数字1* param number2 数字2* return*/Overridepublic int cal(int number1, int number2) {return number1 - number2;} } 创建工厂类代码如下 public class Factory {public static CalApi getCalApi(String operator) {switch (operator) {case : {return new AdditionCalApi();}case -: {return new SubtractionCalApi();}default: return null;}} } 客户端如何使用工厂客户端就不用再自己去创建接口的对象了应该使用工厂来获取 。 经过改造客户端代码如下: public class Client {public static void main(String[] args) {CalApi calApi1 Factory.getCalApi();int rs1 calApi1.cal(12, 55);System.out.println(rs1);CalApi calApi2 Factory.getCalApi(-);int rs2 calApi2.cal(12, 55);System.out.println(rs2);} } 客户端通过简单工厂创建 了一个实现接口的对象然后面向接口编程从客户端来看它根本不知道具体的实现是什么也不知道是如何实现的它只知道通过工厂获得了一个接口对象 然后通过这个接口来获取想要的功能。 3.3.2 模式分解 客户端与接口具体的实现类实现了完全的解藕。工厂类跟接口和接口的实现在一起的是一个封装体。如下图 图3 中的虚线框就好比是一个组件的包装边界表示接口、实现类和工厂类组合成了一 个组件。在这个封装体里面只有接口和工厂是对外的也就是让外部知道并使用的 所以故意漏了一些在虚线框外而具体的实现类是不对外的被完全包含在虚线框内。 对于客户端而言只是知道了接口Api和简单工厂Factory通过Factory 就可以获得Api 了这样就达到了让Client在不知道具体实现类的情况下获取接口Api。 所以看似简单地将new Impl (这句话从客户端里面移动到了简单工厂里面其实是有了质的变化的。 3.3.3 理解简单工厂模式 简单工厂模式Simple Factory Pattern属于创建型设计模式之一其核心思想是通过一个专门的工厂类来负责创建其他类的实例将实例的创建与使用解耦减少客户端直接创建对象的责任。 简单工厂模式通常涉及以下三个角色 工厂角色Factory这是简单工厂模式的核心含有一个创建产品的方法客户端调用这个方法来请求产品。根据传入的参数工厂决定创建哪一种产品。 抽象产品角色Product这是工厂需要创建的所有对象的父类或接口通常是一个抽象类或接口定义了产品的公共接口。 具体产品角色Concrete Product工厂方法创建的具体实例这些产品是继承自抽象产品或实现了产品接口的类。 简单工厂模式的核心思想可以概括为 集中管理将对象的创建集中到一个位置便于管理和维护。 解耦减少系统中的代码耦合使用者不需要知道具体的产品类名只需要知道工厂类和产品的抽象接口。 易于扩展增加新的产品类时只需在工厂类中新增相应的创建逻辑即可对其他类的修改较小遵循开闭原则在扩展时不需要修改现有代码只需要增加新的代码。 但是简单工厂模式也有其局限性 工厂类的职责相对比较重如果产品种类非常多工厂方法会变得非常复杂。当增加新产品时需要修改工厂类这违反了开闭原则对扩展开放对修改封闭。 3.4 简单工厂模式优缺点 优点 帮助封装简单工厂虽然很简单但是非常友好帮我们实现了组件的封装然后让组件外部能真正面向接口编程。 解耦通过简单工厂实现了客户端和具体实现类的解耦。如同上面的例子客户端根本就不知道具体是由谁来实现也不知道具体是如何实现的客户端只是通过工厂获取它需要的接口对象。 缺点 可能增加客户端的复杂度如果通过客户端的参数来选择具体的实现类那么就必须让客户端能理解各个参数所代表的具体功能和含义这样会增加客户端使用的难度也部分暴露了内部实现这种情况可以选用可配置的方式来实现。 不方便扩展子工厂私有化简单工厂的构造方法使用静态方法来创建接口也就不能通过写简单工厂类的子类来改变创建接口的方法的行为了。不过通常情况下是不需要为简单工厂创 建子类的。 3.5 思考简单工厂模式 3.5.1 本质 筒单工厂的本质是选择实现。 简单工厂的重点在选择实现是已经做好了的。就算实现再简单也要由具体的实现类来实现而不是在简单工厂里面来实现。简单工厂的目的在于为客户端来选择相应的实现从而使得客户端和实现之间解耦。这样一来具体实现发生了变化就不用变动客户端了这个变化会被简单工厂吸收和屏蔽掉。 实现简单工厂的难点就在于 “如何选择” 实现前面便子中传递参数的方法 那都是静态的参数还可以实现成为动态的参数。比如在运行期间由工厂去读取某个内存的值或者是去读取数据库中的值然后根据这个值来选择具体的实现等。 3.5.2 何时选用简单工厂模式 建议在以 下情况中选用简单工厂 如果想要完全封装隔离具体实现让外部只能通过接又来操作封装体那么可 以选用简单工厂让客户端通过工厂来获取相应的接又而无须关心具体的实现。 如果想要把对外创建对象的职责集中管理和控制可以选用简单工厂一个简 单工厂可以创建很多的、不相关的对象可以把对外创建对象的职责集中到一个简单 工厂来从而实现集中管理和控制。 3.6 相关设计模式结合 简单工厂模式本身是一个非常基础的创建型模式它是许多更复杂设计模式的起点。虽然它具有一定的局限性但是在与其他设计模式结合使用时它可以帮助更好地组织和管理代码。以下是几种与简单工厂模式相结合的设计模式以及这种结合的好处 策略模式Strategy Pattern 简单工厂可以创建策略模式中的各种策略对象。策略模式允许您在运行时根据不同的情境切换算法或策略。当结合简单工厂时您可以隐藏创造这些策略的逻辑简化策略的更换过程进而使得客户代码在使用时只需要关注策略接口而不是实现。 工厂方法模式Factory Method Pattern 虽然简单工厂模式不是工厂方法模式但是它可以被视为是工厂方法模式的一种特例当只有一个具体工厂类时。如果产品的创建逻辑比较简单且不需要扩展额外的工厂类使用简单工厂可能更为简便。 单例模式Singleton Pattern 简单工厂和单例模式可以结合起来用于确保特定类型只有一个实例被创建。例如简单工厂可以返回应用程序中唯一的数据库连接实例或配置对象从而保证资源的统一管理。 外观模式Facade Pattern 简单工厂可能被用于实现一个外观类的一部分这个外观类提供了一个简化的接口用于隐藏更复杂的子系统。外观模式经常与简单工厂一起使用进一步简化客户端和子系统之间的交互。 适配器模式Adapter Pattern 当需要提供多个适配器类的实例时简单工厂可以帮助创建这些类无论是对象适配器还是类适配器简单工厂都可以根据不同情况和需求来创建合适的适配器实例。 建造者模式Builder Pattern 在某些情况下可以使用简单工厂来选择并创建具体的建造者实例。建造者模式通常用于创建复杂的对象其中对象的创建过程需要多个步骤和过程。简单工厂可用于封装这一选择过程。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国美网站建设的目的北京养老网站开发

随着互联网的快速发展,越来越多的网站开始使用HTTPS协议来保证用户的信息安全和隐私。而HTTPS协议的实现离不开HTTPS证书的支持。HTTPS证书是一种数字证书,用于验证网站的身份并加密数据传输。它通过使用公钥加密技术,确保用户与网站之间的通…

阿德勒的课题分离是很好用的东西

正文今天聊一个心理学概念,我觉得非常实用的东西:阿德勒的 "课题分离"。之前聊过,心理学三巨头:弗洛伊德、荣格、阿德勒。详情见这篇文章。精神分析我们就不说了,起码原教旨主义就不说了,那个就是邪教…

巴南网站建设个人域名备案的要求

我的个人博客主页:如果’真能转义1️⃣说1️⃣的博客主页 关于Java基本语法学习---->可以参考我的这篇博客:《我在VScode学Java》 续《我在VScode学Java(Java的类与对象)》 方法会操作对象并访问他们的实例字段。 伍._. 显式参…

自己网站制作主题猫-wordpress

刚开始写文章还希望大家可以喜欢,对于爬虫只是个人整理出的方法,爬虫大牛请嘴下留情。“”仅限学术交流,如有冒犯请联系作者删除“”话不多说,想分析天津地区餐饮行业的大致情况,要爬出(商铺名称&#xff0…

网站生成wap设计开发流程

题目描述 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。 注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。 返回一个表示每个字符串片段的长度的列表。…

手机网站智能管理系统金华企业网站建站模板

电脑是我们办公、生活和娱乐必不可缺少的设备,里面存储着我们很多重要的文件。但是,有时候我们不小心误删了文件,或者是不小心删除了一些重要的数据等,要怎么进行恢复呢?今天,小编就专门给大家讲下刚删除的文件重新找回方法。 方法一: 文件不小心删除了,请立即停止对硬…

做群头像的网站在线制作国内重大新闻事件

今天推荐一个Python学习的干货。 几个印度小哥,在GitHub上建了一个各种Python算法的新手入门大全,现在标星已经超过2.6万。这个项目主要包括两部分内容:一是各种算法的基本原理讲解,二是各种算法的代码实现。 传送门在此&#x…

怎么设置iis默认网站广州制作企业网站

读取并计算指定文件的MD5哈希值 /*** 读取并计算指定文件的MD5哈希值* param {string} file - 文件路径* returns {void} 不返回任何值,但会打印出文件的MD5哈希值*/ const fs require(fs); // 引入文件系统模块 const crypto require(crypto); // 引入加密模块 …

网站建设标准合同安徽网站设计费用

🎊专栏【玩转Linux操作】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【Counting Stars 】 欢迎并且感谢大家指出小吉的问题🥰 文章目录 🍔概述🍔命令⭐常用选项 🍔练…

网站要挂工商标识怎么做h3c路由器怎么做网站映射

文章目录 一、noConflict() 方法使用方法:注意事项: 二、JSONP简介1. 跨域数据请求2. API 数据调用3. 简单的数据共享使用注意事项:示例: 三、jQuery 使用 JSONP四、热门文章 一、noConflict() 方法 jQuery.noConflict() 方法是 …

娄底北京网站建设吉林省建设安全信息网站

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 车辆档案模块2.4 车辆理赔模块2.5 理赔照片模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 车辆表3.2.3 理赔表3.2.4 理赔照片表 四、系统展示五、核心代码5.1 查询车…

免费用搭建网站微信h5页面是什么

AcWing 787. 归并排序 文章目录 题目描述CGo模板 题目描述 给定你一个长度为 n 的整数数列。 请你使用归并排序对这个数列按照从小到大进行排序。 并将排好序的数列按顺序输出。 输入格式 输入共两行,第一行包含整数 n。 第二行包含 n 个整数(所有…

别再混淆 PHP8.1 中纤程 Fibers 和协程 Coroutines 了 一文搞懂它们的区别

别再混淆 PHP8.1 中纤程 Fibers 和协程 Coroutines 了 一文搞懂它们的区别 PHP 从早期那个只能写动态网页的简单脚本语言,发展到现在已经走了很远。PHP 8.1 的发布带来了一个特别令人兴奋的新功能:纤程(Fibers)——…

HTTP Request Blocker的下载与使用 - 实践

HTTP Request Blocker的下载与使用 - 实践2025-09-24 08:17 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: bloc…

学做网站赚钱方法wordpress 运行天数 小工具

考研计算机网课辅导哪个好?面对市面上如此之多的考研辅导,怎么选择成了很多学员的难题。现在的在线教育水平很高了,特别是在考研辅导上,学习自由,配套服务全面。找培训还是要看老师,比较牛叉的注会老师如张…

织梦网站模板视频教程宠物 wordpress

文章目录 写在前面Tag题目1方法一:动态规划方法二:空间优化 题目2方法一:动态规划空间优化 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主…

杭州九鸿科技网站开发威海建设集团网站首页

有如下的实体对象 public class BookEntity {private String desc; }查询操作的时候会报错SQL错误 解决方法 在字段属性上加注解,用反引号包裹属性值 public class BookEntity {TableField("desc")private String desc; }参考 解决MySQL 中使用index…

多人视频网站开发公司厦门建设局

本文简要介绍我们刚刚被WSDM2021会议录用并即将发表的论文"Time-Series Event Prediction with Evolutionary State Graph"(论文地址),在文中我们提出了一种将时序转化为图进行表示建模的方法。同时我们把所实现的方法落地为阿里云SLS的智能巡检服务&…

科技公司网站模板官网wordpress用户注册设置

目录 三、存储虚拟化(一)存储虚拟化的一般模型(二)存储虚拟化的实现方式(三)案例分析 四、网络虚拟化(一)核心层网络虚拟化(二)接入层网络虚拟化(…

h5平台网站开发百度网址大全简单版

java springmvc 注册中央调度器代码解析发布时间:2020-08-22 20:58:23来源:脚本之家阅读:107作者:荆棘人这篇文章主要介绍了java springmvc 注册中央调度器代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工…