建设学校网站需要具备wordpress 获取域名

张小明 2025/12/31 22:44:22
建设学校网站需要具备,wordpress 获取域名,哪个跨境电商平台好做,企业网站设计需求文档0. 个人感悟 工厂模式是经典的创建型模式#xff0c;工作中也经常用到#xff0c;值得一学核心思想是将对象的创建和自身业务隔离开#xff0c;从而达到复用、解耦的效果随着业务的逐渐扩展(产品创建逻辑膨胀、不同产品组合工作等)#xff0c;工厂抽象程度不断加深#x…0. 个人感悟工厂模式是经典的创建型模式工作中也经常用到值得一学核心思想是将对象的创建和自身业务隔离开从而达到复用、解耦的效果随着业务的逐渐扩展(产品创建逻辑膨胀、不同产品组合工作等)工厂抽象程度不断加深由简单工厂逐渐演化到工厂方法模式和抽象工厂每种模式都有自己的优缺点根据业务进行选择在实际工作中可以结合配置文件、spring依赖注入、反射等方式来提高工厂的灵活性和扩展性在最后展示了自己在工作中实践的一个实例一个个人学习的经验认为什么都原汁原味的好所以学习设计模式开始就直接看原书《设计模式》然后低估了学习曲线觉得晦涩难啃自信受挫恶性循环。后面改变策略由易到难先看一些大家加工过的好懂的最后在回复本源看母书。认知是不断进步的不要害怕当前犯错。共勉。1.简单工厂1.1概念定义一个创建对象的类由这个类来封装创建对象的行为。在《设计模式:可复用面向对象软件基础》书中将简单工厂模式和工厂方法模式化为一类认为前者是后者的特例理解定义专门创建对象的类提高复用同时将对象的创建和使用进行隔离降低系统耦合将创建逻辑封装提高内聚。1.2 适配场景(解决什么问题)多处创建对象创建对象逻辑相对复杂(封装、复用)对象有类族划分比如汽车可以有宝马车、奔驰车等汽车族(管理产品族)产品族有限业务变动小一个类进行管理可以hold住(一个具体工厂管理对象)1.3实现方法1.3.1 传统创建方法哪里需要哪里创建(缺乏复用)边创建边使用(缺乏封装耦合重)UML示意:1.3.2 简单工厂方法:创建对象的逻辑交给生产工厂工厂屏蔽实现细节产品进行类族管理建立统一的产品接口客户端与工厂通讯UML示意:抽象产品: 产品的高度抽象定义产品的行为一般为接口或者抽象类具体产品: 抽象产品的实现类是客户端需要的实例工厂: 简单工厂的核心承上启下承接客户端的创建对象需求统一管理实例1.4 代码示例需求客户希望我们给做一个淘宝另一个客户也希望我们做个淘宝还有一个客户希望我们做个京东。。。传统的做法是按业务流程来来一个客户我们给实现(new)一个具体的购物平台publicclassTaoBaoShopping{/** * description 购物 * author bigHao * date 2025/12/21 **/publicvoidshopping(){System.out.println(taoBaoShopping);}}publicclassJDShopping{/** * description 购物 * author bigHao * date 2025/12/21 **/publicvoidshopping(){System.out.println(JDShopping);}}publicclassClient{staticvoidmain(){JDShoppingjdShoppingnewJDShopping();jdShopping.shopping();TaoBaoShoppingtaoBaoShoppingnewTaoBaoShopping();taoBaoShopping.shopping();}}这样做缺乏设计不利于复用和维护。我们可以设计一个工厂由工厂来统一管理对象创建只需要告诉工厂我们需要什么平台。后续某个平台的代码修改或者新增平台只需修改工厂实现。购物平台类族publicinterfaceShoppingPlatform{/** * description 购物 * author bigHao * date 2025/12/21 **/voidshopping();}publicclassJDShoppingimplementsShoppingPlatform{Overridepublicvoidshopping(){System.out.println(JDShopping);}}publicclassTaoBaoShoppingimplementsShoppingPlatform{Overridepublicvoidshopping(){System.out.println(taoBaoShopping);}}工厂 接受客户端参数根据参数选择不同的具体产品publicclassShoppingPlatformFactory{publicstaticfinalStringJDJD;publicstaticfinalStringTAO_BAOtaoBao;/** * param shopTye 平台类型 * return ShoppingPlatform 购物平台 * description 根据平台类型返回购物平台实现 * author bigHao * date 2025/12/21 **/publicShoppingPlatformcreateShoppingPlatform(StringshopTye){returnswitch(shopTye){caseJD-newJDShopping();caseTAO_BAO-newTaoBaoShopping();default-null;};}}客户端publicclassClient{staticvoidmain(){StringshopTye;ShoppingPlatformshoppingPlatformnewShoppingPlatformFactory().createShoppingPlatform(shopTye);}}1.5 优缺点结合第一章、第三章记录的1核(高内聚低耦合)4性(复用性 可读性 扩展性 稳定性)7大原则来分析模式的优缺点这里只列突出的点优点高内聚低耦合: 创建的行为内聚到工厂客户端不需要和具体产品打交道只用与工厂通信降低耦合单一职责: 创建职责和产品本身业务隔开开闭原则、扩展性: 符合一定的开闭原则可以通过增加具体产品和修改工厂代码来达到扩展抽取抽象产品进行类族管理后续扩展只用修改工厂代码缺点依赖倒置: 依赖具体的工厂类扩展性: 增加具体产品需要修改工厂代码这里的switch需要增加新的case对象的创建都依赖于工厂产品类型多时可能会增加工厂的逻辑(工厂方法模式可以解决这个问题)2.工厂方法模式2.1概念Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation tosubclasses.翻译:定义一个用于创建对象的接口让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。理解:对比简单工厂统一管理对象创建工厂方法模式将工厂创建产品的方法抽象化自身只做接口定义由具体的实现类来创建产品。因而将“类的实例化延迟到其子类”。2.2 适配场景包含简单工厂模式的场景产品族日益扩大产品创建逻辑越来越复杂一个具体工厂逻辑日益膨胀分工需要。不同的人或团队去维护某个具体产品创建2.3实现方法定义里说的很清楚工厂方法抽象出来创建具体实例的方法延迟到子工厂抽象产品: 产品的高度抽象定义产品的行为一般为接口或者抽象类具体产品: 抽象产品的实现类是客户端需要的实例抽象工厂: 工厂方法模式的核心。定义创建产品的抽象方法。具体工厂: 抽象工厂的实现类创建具体的产品2.4 代码示例还是以购物平台为例改用工厂方法模式购物平台类族publicinterfaceShoppingPlatform{/** * description 购物 * author bigHao * date 2025/12/21 **/voidshopping();}publicclassJDShoppingimplementsShoppingPlatform{Overridepublicvoidshopping(){System.out.println(JDShopping);}}publicclassTaoBaoShoppingimplementsShoppingPlatform{Overridepublicvoidshopping(){System.out.println(taoBaoShopping);}}抽象工厂和其实现publicinterfaceIShoppingPlatformFactory{/** * return ShoppingPlatform 购物平台 * description 创建购物平台 * author bigHao * date 2025/12/21 **/ShoppingPlatformcreateShoppingPlatform();}publicclassJDShoppingFactoryimplementsIShoppingPlatformFactory{OverridepublicShoppingPlatformcreateShoppingPlatform(){returnnewJDShopping();}}publicclassTaoBaoShoppingFactoryimplementsIShoppingPlatformFactory{OverridepublicShoppingPlatformcreateShoppingPlatform(){returnnewTaoBaoShopping();}}客户端publicclassClient{staticvoidmain(){JDShoppingFactoryjdShoppingFactorynewJDShoppingFactory();jdShoppingFactory.createShoppingPlatform();TaoBaoShoppingFactorytaoBaoShoppingFactorynewTaoBaoShoppingFactory();taoBaoShoppingFactory.createShoppingPlatform();}}2.5 优缺点优点依赖倒置: 工厂进行了抽象客户端依赖抽象工厂开闭原则、扩展性: 符合一定的开闭原则可以通过扩展的方式来增加具体产品和具体工厂缺点扩展性: 扩展需要同时增加具体产品和具体工厂; 对比简单工厂工厂方法模式其实是将选择具体产品的逻辑从工厂(示例中的switch逻辑)转嫁给了客户端引入新的产品势必需要客户端修改代码适配3.模式名称3.1概念Provide an interface for creating families of related or dependent objects without specifying their concrete classes.翻译:提供一个创建一系列相关或相互依赖对象的接口而无需指定它们具体的类理解:先引入两个概念: 产品族和产品等级结构产品等级结构: 产品的继承结构抽象产品和具体产品。比如抽象购物平台类有淘宝、京东等子类一起构成了产品等级结构。产品族:同一个工厂生产的不同产品等级结构中的一组具体产品。比如京东出品的京东购物和京东外卖都是属于一个工厂。购物外卖京东京东购物京东外卖横向 产品族淘宝淘宝购物淘宝外卖纵向 产品等级定义中的“一些列相关或相互依赖”可以理解为不同的抽象产品需要一起工作而“具体的类”可以理解为具体产品具体工厂可以理解为一个产品族工厂3.2 适配场景包含工厂方法模式场景一个产品族需要被设计在一起工作3.3实现方法定义里也很清楚抽象工厂中定义创建有依赖关系抽象产品的接口具体工厂实现创建具体产品族抽象产品: 产品的高度抽象定义产品的行为一般为接口或者抽象类。这里是一个产品族。具体产品: 抽象产品的实现类是客户端需要的实例。产品族实例。抽象工厂: 抽象工厂模式的核心。定义创建一起工作的产品创建的接口方法。具体工厂: 抽象工厂的实现类创建具体的产品族。3.4 代码示例客户不仅想做购物平台还想加入外卖到平台中购物平台类族publicinterfaceShoppingPlatform{/** * description 购物 * author bigHao * date 2025/12/21 **/voidshopping();}publicclassJDShoppingimplementsShoppingPlatform{Overridepublicvoidshopping(){System.out.println(JDShopping);}}publicclassTaoBaoShoppingimplementsShoppingPlatform{Overridepublicvoidshopping(){System.out.println(taoBaoShopping);}}外卖平台类族publicinterfaceFoodDeliverPlatform{/** * description 点外卖 * author bigHao * date 2025/12/21 **/voiddeliver();}publicclassJDFoodDeliverimplementsFoodDeliverPlatform{Overridepublicvoiddeliver(){System.out.println(JD food deliver);}}publicclassTaoBaoFoodDeliverimplementsFoodDeliverPlatform{Overridepublicvoiddeliver(){System.out.println(taoBao food deliver);}}工厂类族publicinterfaceIPlatformFactory{/** * return ShoppingPlatform 购物平台 * description 创建购物平台 * author bigHao * date 2025/12/21 **/ShoppingPlatformcreateShoppingPlatform();/** * return FoodDeliverPlatform 外卖平台 * description 创建外卖平台 * author bigHao * date 2025/12/21 **/FoodDeliverPlatformcreateFoodDeliverPlatform();}publicclassJDFactoryimplementsIPlatformFactory{OverridepublicShoppingPlatformcreateShoppingPlatform(){returnnewJDShopping();}OverridepublicFoodDeliverPlatformcreateFoodDeliverPlatform(){returnnewJDFoodDeliver();}}publicclassTaoBaoFactoryimplementsIPlatformFactory{OverridepublicShoppingPlatformcreateShoppingPlatform(){returnnewTaoBaoShopping();}OverridepublicFoodDeliverPlatformcreateFoodDeliverPlatform(){returnnewTaoBaoFoodDeliver();}}客户端publicclassClient{staticvoidmain(){JDFactoryjdFactorynewJDFactory();jdFactory.createShoppingPlatform();jdFactory.createFoodDeliverPlatform();TaoBaoFactorytaoBaoFactorynewTaoBaoFactory();taoBaoFactory.createShoppingPlatform();taoBaoFactory.createFoodDeliverPlatform();}}3.5 优缺点优点扩展性: 易于产品族的更换缺点扩展性: 扩展一个产品等级结构需要在增加新的产品族的同时去更改抽象工厂和具体工厂当然这个是设计灵活性需要付出的代价实际项目需要均衡考虑客户端需要指定具体工厂当然这个其实可以通过读取配置文件等方式来进行优化。后面会举一个之前在项目中使用过的简单工厂配置文件配置来实现不用修改客户端代码4.简单工厂配置文件依赖注入实践背景三种工厂模式中各有优缺点。其中有一个比较共性的缺点:当需要更改实现时还是需要更改代码比如简单工厂需要更改自身swich代码来更换选择实例工厂方法和抽象工厂需要客户端来选择用哪个工厂。在工作中使用简单工厂时也遇到了这个问题最后先到了一套方案大家可以参考。解决思路:有没有好的办法来解决呢。归纳起来有3个重要步骤可以针对来解决变更的传递。如何将告诉程序我要更改实现。传统实现是改客户端代码选择其它实现。 这点可以通过加载配置文件来替代。如何纳管所有的实现。 拿到变更的参数了那么需要和系统中所有实例进行匹配首先需要纳管所有实现。简单工厂其实没有纳管功能需要自己去依赖具体产品。 Spring的出现替我们解决了这个问题。传递和匹配。 有了变更参数和所有实现接下来指定匹配规则这个可以提前约定比如在抽象产品中添加一个抽象方法返回一个产品标识。用这个标识与输入匹配。代码demo示例产品类族: 注意加入注解让容器纳管ComponentpublicinterfaceShoppingPlatform{/** * description 购物 * author bigHao * date 2025/12/22 **/voidshopping();}ComponentpublicclassJDShoppingimplementsShoppingPlatform{Overridepublicvoidshopping(){System.out.println(JDShopping);}}ComponentpublicclassTaoBaoShoppingimplementsShoppingPlatform{Overridepublicvoidshopping(){System.out.println(taoBaoShopping);}}工厂: 注入所有实现提供匹配参数-实例的方法ComponentpublicclassShoppingPlatformFactory{// 这里会注入ShoppingPlatform的所有实现ResourceprivateListShoppingPlatformshoppingPlatforms;/** * param shopTye 平台类型 * return ShoppingPlatform 购物平台 * description 根据平台类型返回购物平台实现 * author bigHao * date 2025/12/22 **/publicOptionalShoppingPlatformcreateShoppingPlatform(StringshopTye){// 这里的匹配逻辑是类名.startsWith入参 比如JDShopping可以匹配上JD TaoBaoShopping可以匹配上TaoBaoreturnshoppingPlatforms.stream().filter(item-item.getClass().getSimpleName().startsWith(shopTye)).findFirst();}}配置文件platform.typeJD客户端: 这里让程序在项目初始化后启动ComponentpublicclassStartedEventListenerimplementsApplicationListenerApplicationStartedEvent{Value(${platform.type})privateStringplatformType;ResourceprivateShoppingPlatformFactoryshoppingPlatformFactory;OverridepublicvoidonApplicationEvent(ApplicationStartedEventevent){System.out.println(应用启动完成通知监听器执行其它操作--start);System.out.println(platformType : platformType);OptionalShoppingPlatformshoppingPlatformshoppingPlatformFactory.createShoppingPlatform(platformType);booleanisPresentshoppingPlatform.isPresent();if(isPresent){System.out.println(instance outPut: );shoppingPlatform.get().shopping();}else{System.out.println(get instance failed.);}System.out.println(应用启动完成通知监听器执行其它操作--end);}}输出应用启动完成通知监听器执行其它操作--start platformType:JD instance outPut:JDShopping应用启动完成通知监听器执行其它操作--end参考韩顺平 Java设计模式张维鹏 Java设计模式之创建型工厂模式详解简单工厂工厂方法抽象工厂alpha_panda 设计模式之工厂模式factory pattern
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站建设 昆明 价格怎么做网站详情页

Nintendo Switch hekate启动器终极指南:5分钟配置一键启动方案 【免费下载链接】hekate hekate - A GUI based Nintendo Switch Bootloader 项目地址: https://gitcode.com/gh_mirrors/he/hekate 还在为每次启动Switch时反复选择系统而烦恼吗?想象…

张小明 2025/12/31 22:42:19 网站建设

此网站三天换一次域名网站开发 界面

Kotaemon共享存储配置:NFS或云盘挂载实践 在构建企业级智能问答系统时,一个常被低估却至关重要的问题浮出水面:当多个服务实例并行运行,如何确保它们读取的是同一份模型、访问的是同一个会话状态? 设想这样一个场景—…

张小明 2025/12/31 22:40:16 网站建设

网站服务器设置网站开发要用到的工具

STM32 USB主机模式:构建低成本嵌入式视觉系统的完整指南 【免费下载链接】STM32_HOST_UVC_Camera Example of connecting USB Web camera to STM32F4 USB HOST 项目地址: https://gitcode.com/gh_mirrors/st/STM32_HOST_UVC_Camera 在嵌入式视觉应用领域&…

张小明 2025/12/31 22:38:13 网站建设

做酒店网站所用到的算法室内设计平面图简单

IU5209E是一款支持快充申请的4节串联锂电池升压充电管理芯片,集成功率MOS与异步开关架构,外围器件需求极少,能缩减方案尺寸并降低BOM成本,适用于蓝牙音箱、POS机、电子烟、锂电电池包、对讲机及玩具等设备。芯片输入电压范围3.6~1…

张小明 2025/12/31 22:34:07 网站建设

iis7.5怎么做网站苏州建设造价信息网站

目录 前言:为什么后端圈都在推FastAPI? 第一阶段:环境搭建与Hello World(含避坑指南) 第二阶段:参数接收的艺术(自动校验的快乐) 第三阶段:Pydantic——数据验证的神器…

张小明 2025/12/31 22:32:06 网站建设

企业公司网站制作建设色彩学习网站

计算机毕业设计springboot基于web的动漫综合社区的设计与实现h0m8n9 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着互联网技术的飞速发展,动漫文化的影响力不断…

张小明 2025/12/31 22:30:02 网站建设