网站界面风格设计描述网站开发的实验心德

news/2025/10/5 6:54:18/文章来源:
网站界面风格设计描述,网站开发的实验心德,网站组建,新西兰网站后缀工厂方法模式 1#xff09;问题 简单工厂模式 当需要引入新产品时#xff0c;由于静态工厂方法通过所传入参数的不同来创建不同的产品#xff0c;需要修改工厂类的源代码。 2#xff09;概述 针对不同的产品提供不同的工厂#xff0c;系统提供一个与产品等级结构对应…工厂方法模式 1问题 简单工厂模式 当需要引入新产品时由于静态工厂方法通过所传入参数的不同来创建不同的产品需要修改工厂类的源代码。 2概述 针对不同的产品提供不同的工厂系统提供一个与产品等级结构对应的工厂等级结构。 3角色 Product抽象产品定义产品的接口是工厂方法模式所创建对象的超类型是产品对象的公共父类。ConcreteProduct具体产品实现了抽象产品接口某种类型的具体产品由专门的具体工厂创建具体工厂和具体产品之间一一对应。Factory抽象工厂在抽象工厂类中声明了工厂方法(Factory Method)用于返回一个产品。抽象工厂是工厂方法模式的核心所有创建对象的工厂类都必须实现该接口。ConcreteFactory具体工厂是抽象工厂类的子类实现了抽象工厂中定义的工厂方法并可由客户端调用返回一个具体产品类的实例。代码示例 interface Factory {public Product factoryMethod(); }class ConcreteFactory implements Factory {public Product factoryMethod() {return new ConcreteProduct();} }注意 在实际使用时具体工厂类在实现工厂方法时除了创建具体产品对象之外还可以负责产品对象的初始化及一些资源和环境的配置工作例如连接数据库、创建文件等。 可以通过配置文件来存储具体工厂类 ConcreteFactory 的类名更换新的具体工厂时无须修改源代码系统扩展更为方便。 4案例-初始方案 问题 工厂类包含大量的if…else…代码导致维护和测试难度增大 系统扩展不灵活增加新类型的日志记录器必须修改静态工厂方法的业务逻辑。 5案例-重构后 Logger 接口充当抽象产品其子类 FileLogger 和 DatabaseLogger 充当具体产品LoggerFactory 接口充当抽象工厂其子类FileLoggerFactory 和 DatabaseLoggerFactory 充当具体工厂。 //日志记录器接口抽象产品 interface Logger {public void writeLog(); }//数据库日志记录器具体产品 class DatabaseLogger implements Logger {public void writeLog() {System.out.println(数据库日志记录。);} }//文件日志记录器具体产品 class FileLogger implements Logger {public void writeLog() {System.out.println(文件日志记录。);} }//日志记录器工厂接口抽象工厂 interface LoggerFactory {public Logger createLogger(); }//数据库日志记录器工厂类具体工厂 class DatabaseLoggerFactory implements LoggerFactory {public Logger createLogger() {//连接数据库代码省略//创建数据库日志记录器对象Logger logger new DatabaseLogger(); //初始化数据库日志记录器代码省略return logger;} }//文件日志记录器工厂类具体工厂 class FileLoggerFactory implements LoggerFactory {public Logger createLogger() {//创建文件日志记录器对象Logger logger new FileLogger(); //创建文件代码省略return logger;} }class Client {public static void main(String args[]) {LoggerFactory factory;Logger logger;factory new FileLoggerFactory(); //可引入配置文件实现logger factory.createLogger();logger.writeLog();} }6案例-使用反射和配置文件优化 在客户端代码中不再使用 new 关键字创建工厂对象而是将具体工厂类的类名存储在配置文件中通过读取配置文件获取类名字符串再使用 Java 的反射机制根据类名字符串生成对象。 //通过类名生成实例对象并将其返回 Class cClass.forName(String); Object objc.newInstance(); return obj;配置文件 config.xml 存储具体工厂类类名 !— config.xml -- ?xml version1.0? configclassNameFileLoggerFactory/className /configXML工具类 //工具类XMLUtil.java import javax.xml.parsers.*; import org.w3c.dom.*; import org.xml.sax.SAXException; import java.io.*;public class XMLUtil { //该方法用于从XML配置文件中提取具体类类名并返回一个实例对象public static Object getBean() {try {//创建DOM文档对象DocumentBuilderFactory dFactory DocumentBuilderFactory.newInstance();DocumentBuilder builder dFactory.newDocumentBuilder();Document doc; doc builder.parse(new File(config.xml)); //获取包含类名的文本节点NodeList nl doc.getElementsByTagName(className);Node classNodenl.item(0).getFirstChild();String cNameclassNode.getNodeValue();//通过类名生成实例对象并将其返回Class cClass.forName(cName);Object objc.newInstance();return obj;} catch(Exception e) {e.printStackTrace();return null;}} }客户端代码 class Client {public static void main(String args[]) {LoggerFactory factory;Logger logger;factory (LoggerFactory)XMLUtil.getBean(); //getBean()的返回类型为Object需要进行强制类型转换logger factory.createLogger();logger.writeLog();} }引入XMLUtil类和XML配置文件后增加新的日志记录方式只需如下步骤 新的日志记录器需要继承抽象日志记录器Logger 对应增加一个新的具体日志记录器工厂继承抽象日志记录器工厂LoggerFactory并实现其中的工厂方法createLogger()返回具体日志记录器对象 修改配置文件config.xml将新增的日志记录器工厂类的类名替换原有工厂类类名 编译新增的日志记录器类和日志记录器工厂类原有类库代码无须做任何修改。 7案例-使用方法重载和隐藏进行优化 1.方法重载 引入重载方法后抽象工厂 LoggerFactory 的代码如下 interface LoggerFactory {public Logger createLogger();public Logger createLogger(String args);public Logger createLogger(Object obj); }具体工厂类 DatabaseLoggerFactory 的代码如下 class DatabaseLoggerFactory implements LoggerFactory {public Logger createLogger() {//使用默认方式连接数据库代码省略Logger logger new DatabaseLogger(); //初始化数据库日志记录器代码省略return logger;}public Logger createLogger(String args) {//使用参数args作为连接字符串来连接数据库代码省略Logger logger new DatabaseLogger(); //初始化数据库日志记录器代码省略return logger;} public Logger createLogger(Object obj) {//使用封装在参数obj中的连接字符串来连接数据库代码省略Logger logger new DatabaseLogger(); //使用封装在参数obj中的数据来初始化数据库日志记录器代码省略return logger;} }2.方法隐藏 为进一步简化客户端的使用还可以对客户端隐藏工厂方法 在工厂类中调用产品类的业务方法客户端无须调用工厂方法创建产品直接通过工厂即可使用所创建的对象中的业务方法。 抽象工厂类 LoggerFactory 的代码如下 //改为抽象类 abstract class LoggerFactory {//在工厂类中直接调用日志记录器类的业务方法writeLog()public void writeLog() {Logger logger this.createLogger();logger.writeLog();}public abstract Logger createLogger(); }客户端代码修改如下 class Client {public static void main(String args[]) {LoggerFactory factory;factory (LoggerFactory)XMLUtil.getBean();factory.writeLog(); //直接使用工厂对象来调用产品对象的业务方法} }8总结 1.优点 只需要关心所需产品对应的工厂无须关心创建细节无须知道具体产品类的类名。 在系统中加入新产品时无须修改抽象工厂和抽象产品提供的接口无须修改客户端也无须修改其他的具体工厂和具体产品只要添加一个具体工厂和具体产品就可以。 2.缺点 添加新产品时需要编写新的具体产品类还要提供与之对应的具体工厂类系统中类的个数将成对增加会给系统带来额外开销。 考虑到系统的可扩展性需要引入抽象层在客户端代码中均使用抽象层定义增加了系统的抽象性和理解难度且在实现时需要用到DOM、反射等技术增加了系统的实现难度。 3.适用场景 客户端不需要知道具体产品类的类名只需要知道对应的工厂即可。 抽象工厂类通过其子类来指定创建哪个对象。在工厂方法模式中对于抽象工厂类只需要提供一个创建产品的接口而由其子类来确定具体要创建的对象利用面向对象的多态性和里氏代换原则在程序运行时子类对象将覆盖父类对象从而使得系统更容易扩展。

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

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

相关文章

2025 年最新推荐承烧板厂家排行榜:筛选优质企业,破解采购难题,赋能高温工业生产

当前,高温工业领域对承烧板的需求持续攀升,然而市场上承烧板制造商良莠不齐,部分企业为降低成本,在原材料选用和生产工艺上敷衍了事,导致产品在高温环境下易出现开裂、变形等问题,严重影响生产效率,还带来安全隐…

网站开发技术的选择做门户网站的好处

线程休眠:让执行的线程暂停一段时间,进入计时等待状态。 方法:staticvoid sleep(long millis) 调用sleep后,当前线程放弃CPU,在指定时间段之内,sleep所在线程不会获得执行的机会。 此状态下的线程不会释放同步锁/同步监听器. 该方法更多的用…

一文看懂AI SoC芯片

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087什么是SoC?作为智能手机、汽车电子、人工智能、工业控制等领域的“…

浙江省网站建设公司黄骅广信建设集团网站

1.为什么自己写一个时间片调度呢 a. 网上其实有很多成熟的时间片调度例程, 包括我最开始参加工作也是抄的网上的例程(还记得当时领导问我看明白了它的调度原理吗, 作为一个自学刚参加工作的我来说, 看懂别人的意思真的很难, 当时只能含糊其词的说看得差不多) b. 在我看来网上的…

专业商城网站建设价格低装修设计网页版

题目 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate", "nat&qu…

桂林北站地址wordpress 多备份

DB Query Analyzer中的事务管理在DB2中的应用 马根峰 ( 广东联合电子收费股份有限公司, 广州 510300) 摘要 事务控制是数据库应用系统中的关键技术之一,概述了事务控制的概念以及《DB Query Analyzer》中的事务控制,以一个具体的实例,给…

北京免费建站天水市建设银行官方网站

前言 CSS(层叠样式表)是网页设计和开发中不可或缺的一部分。它用于描述网页的视觉表现,使页面不仅实现功能,还能提供吸引人的用户体验。本文将介绍 CSS 的基本概念、语法、选择器及其在提升网页美观性方面的重要性。 什么是 CSS&…

做设计专业的能做网站吗汕头网站建设制作公司

前言: 高可用集群,是指以减少服务中断(如因服务器宕机等引起的服务中断)时间为目的的服务器集群技术。简单的说,集群就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点。 …

电商资讯网站有哪些安仁网络推广

以map[int32]string转化为[]byte为例 背景:算法传给我一个map[int32]string类型的值(map的值本身是json转化成的string),我需要把这个值生成一个文件上传到OSS,但是发现通过url下载下来的文件里面有转义字符。 原因&a…

网站建设工作经历网站范例

一.题目要求 给你一个 二进制 字符串 s ,其中至少包含一个 ‘1’ 。 你必须按某种方式 重新排列 字符串中的位,使得到的二进制数字是可以由该组合生成的 最大二进制奇数 。 以字符串形式,表示并返回可以由给定组合生成的最大二进制奇数。 注…

江苏建设招标网站安卓游戏模板下载网站

目录 一、Seata 架构 1.1、Seata 架构重要角色 1.2、部署 TC 服务 1.2.1、前言 1.2.2、下载 seata-server 包,解压 1.2.3、修改配置 1.2.4、在 nacos 中添加配置 1.2.5、创建数据库表 1.2.6、启动 TC 服务 1.3、微服务集成 Seata 1.3.1、引入依赖 1.3.2、…

文网站建设常见的推广平台有哪些

1、整个项目预期的任务量 (任务量 所有工作的预期时间)和 目前已经花的时间 (所有记录的 ‘已经花费的时间’),还剩余的时间(所有工作的 ‘剩余时间’) ; 所有工作的预期时间&#…

社区网站如何做内容运营wordpress 4.9.4 汉化

在正常情况下,sed将待处理的行读入模式空间,脚本中的命令就一条接着一条的对该行进行处理,直到脚本执行完毕,然后该行被输出,模式空间请空;然后重复刚才的动作,文件中的新的一行被读入&#xff…

运营实力 网站建设上海闵行做网站的公司

文章目录 一、相关知识1.什么是arp(地址解析协议)2.什么是免费arp(1)简介(2)主要应用(3)代码 3.什么是arp缓存中毒(1)简介(2)过程&…

长春模板建站系统个人静态网站

项目编号: S 045 ,文末获取源码。 \color{red}{项目编号:S045,文末获取源码。} 项目编号:S045,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询社区4…

如何设网站主页北京品牌网站建设

固态硬盘(SSD)因其相对于传统硬盘驱动器(HDD)的诸多优势而日益受到青睐,包括更快的速度、更小的体积、更高的能效以及由于没有活动部件而增强的耐用性。此外,SSD 现在提供更大的存储容量,且价格…

月球尘埃电解技术实现资源就地利用

某机构开发的熔融风化层电解系统可将月球尘埃转化为太阳能电池、氧气和建筑材料,通过电流分离金属与氧气实现资源就地利用,该系统已完成关键设计评审并将于2026年进行自主演示。熔融风化层电解技术让月球尘埃变废为宝…

漏洞赏金计划公开后的三个阶段与应对策略

本文详细分析了漏洞赏金计划公开后通常会经历的三个阶段:提交量激增期、稳定期和长期参与期,并提供了每个阶段的具体特征和管理建议,帮助企业更好地规划和运营自己的漏洞赏金计划。漏洞赏金计划公开后可以期待什么?…

做网站建设业务员怎么样网站服务器主机配置

你是不是做实验经常性的需要一些气象数据,例如PM2.5、相对湿度、月均温度等等…… 但是当你开始寻找数据时就遇到困难了,由于权限、数据网站之类的麻烦你会花费大量无用时间,甚至有时候一无所获得不偿失,这就很头疼了!…

网站项目建设策划书济南建设网站制作优化分析

然后我们来看如何用urllib发送post请求,这里我们 用百度翻译为例 我们翻译一个spider,然后我们看请求,可以看到有很多 找到sug这个 可以看到这里的form data,就是post请求体中的内容 然后我们点击preview其实就是 返回的实际内容 然后请求方式用的post 然后我们把上面的信息…