当前位置: 首页 > news >正文

二手商品交易网站开发建云购网站

二手商品交易网站开发,建云购网站,厦门制作网页公司,广东网站建设排名1.概述 工厂模式是一种创建型模式#xff0c;主要作用就是创建对象#xff0c;将对象的创建过程和使用的过程进行解耦。我们平时说的工厂模式实际上是对三种不同类型的工厂模式的统称#xff0c;简单工厂、工厂方法、抽象工厂#xff0c;而在23种设计模式中#xff0c;只…1.概述 工厂模式是一种创建型模式主要作用就是创建对象将对象的创建过程和使用的过程进行解耦。我们平时说的工厂模式实际上是对三种不同类型的工厂模式的统称简单工厂、工厂方法、抽象工厂而在23种设计模式中只定义了工厂方法和抽象工厂将简单工厂看作是工厂方法的一种特例本篇主要讲述的是简单工厂。 简单工厂就像它的名字一样突出一个简单就是将业务流程代码中直接使用new关键字来创建对象修改为通过一个工厂类创建对象这就是简单工厂。如果仅仅只是将new操作转移到了一个新的类里面看起来只是在徒增类的数量和代码量并没有什么意义。 那为什么我们还要使用简单工厂模式呢 是因为它在某些特定的场景下有其存在的价值让我们从不同的场景来看看。 2.从不同场景看简单工厂的意义 2.1.框架或工具的封装 除了日常业务开发之外有时候我们也可能得做一些框架或者工具的开发这部分开发出来的工具需要提供给其他的开发人员使用而他们在使用的时候第一步就是获取到这个工具的对象这种情况下就可以给使用者提供一个简单工厂让使用者通过工厂来创建对象。 例如在Java中使用日历相关的工具Calendar就是通过简单工厂提供的获取日历对象的方法如下图 我们做类似的框架或工具开发的时候完全可以参照Calendar的方式给使用者提供创建对象的能力从而让使用者无需关心对象的实际创建过程而是只需要通过特定的方法和参数就能获取到一个可供使用的对象。 2.2.复杂业务对象的创建 即使是在做业务相关开发有时候也会涉及到一些相对复杂的业务对象的创建例如DDD中的领域对象这时候可以使用简单工厂将产品对象的创建流程从业务流程中抽离。由于创建对象的复杂性被隔离在工厂类中因此当涉及到产品类的变化时比如增加新功能、改变实现方式等只需要改动工厂类不会对使用产品的其他模块造成影响有利于产品创建逻辑的集中管理以及系统的维护和版本升级。 之前在做一个项目开发的时候使用过简单工厂处理过Domain对象的创建先说一下背景 这个项目使用的时COLA架构一种DDD的代码层面实践的框架在这个架构的分层中Domain层属于最底层如下图中的demoWeb-domain Domain层中会完成大部分的业务逻辑但我们知道业务流程中往往伴随着与中间件、其他服务之间的交互例如数据库的存取操作但这部分交互不应该由领域对象来实现。 在COLA中的做法就是提供一个“防腐层”来实现所谓的防腐层就是在domain层中定义与中间件交互的interface再交由infrastructure来实现这样在domain层就只需要关心自己需要做一个什么交互而不需要关心具体的交互实现如下的红框所示。 背景介绍完了说一下这里面存在一个问题就是Domain对象为了保证业务模型的纯洁性一般不会使用Spring来管理领域对象的生命周期在这种情况下如何才能将gatewayImpl对象注入到领域对象中呢 答案是在Infrastructure层中将getewayImpl对象set到领取对象中如果领域对象的创建过程相对复杂就可以使用简单工厂进行创建统一管理创建逻辑代码如下 Component public class MsgWecomAppFactory {Resourceprivate MsgWecomGateway msgWecomGateway;Resourceprivate MsgWecomCacheGateway msgWecomCacheGateway;Resourceprivate WecomHttpHelper wecomHttpHelper;/*** 创建企业微信应用号领域对象用于确认消息** param agentId 应用号ID* return 领域对象*/public MsgWecomApp createMsgWecomAppForConfirm(String agentId) {MsgWecomApp msgWecomApp new MsgWecomApp();// 1.查询企业微信应用配置信息OptionalMsgWecomAppConfig appConfig msgWecomGateway.getWecomAppConfigByAgentId(agentId);Assert.isTrue(appConfig.isPresent(), 企业微信应用号配置信息不存在执行失败agentId agentId);msgWecomApp.setConfig(appConfig.get());msgWecomApp.setMsgWecomCacheGateway(msgWecomCacheGateway);msgWecomApp.setMsgWecomGateway(msgWecomGateway);msgWecomApp.setWecomHttpHelper(wecomHttpHelper);return msgWecomApp;}/*** 创建企业微信应用号领域对象用于发送消息** param agentId 应用号ID* param phones 手机号* return 领域对象*/public MsgWecomApp createMsgWecomAppForSend(String agentId, SetString phones) {MsgWecomApp msgWecomApp new MsgWecomApp();// 1.查询企业微信应用配置信息OptionalMsgWecomAppConfig appConfig msgWecomGateway.getWecomAppConfigByAgentId(agentId);Assert.isTrue(appConfig.isPresent(), 企业微信应用号配置信息不存在);msgWecomApp.setConfig(appConfig.get());// 2.查询用户信息优先使用手机号查询如果手机号为空或手机号未查询到则使用邮箱查询ListMsgWecomMemberInfo msgWecomMemberInfos new ArrayList();if (CollUtil.isNotEmpty(phones)) {msgWecomMemberInfos msgWecomGateway.listWecomMemberInfoByPhone(phones);// 对比参数中的手机号与查询到的手机号获取差集ListString existPhone msgWecomMemberInfos.stream().map(MsgWecomMemberInfo::getPhone).collect(Collectors.toList());msgWecomApp.setNotExistPhones(CollUtil.subtractToList(phones, existPhone));}msgWecomApp.setToSendMemberInfos(msgWecomMemberInfos);msgWecomApp.setMsgWecomCacheGateway(msgWecomCacheGateway);msgWecomApp.setMsgWecomGateway(msgWecomGateway);msgWecomApp.setWecomHttpHelper(wecomHttpHelper);return msgWecomApp;} }2.3.与其他模式的组合使用 策略模式中的选择器实现 在SpringBoot优雅使用策略模式这一篇博客中提到了如何使用Spring对Bean的管理能力来实现策略模式的选择器。同样的如果没有使用Spring或者业务对象的生命周期不需要Spring框架介入时就可以使用简单工厂单例的方式来实现代码如下 /*** 策略选择器工厂*/ public class StrategySelectorFactory {private static final MapString, Strategy STRATEGY_MAP new java.util.HashMap();static {STRATEGY_MAP.put(A, new StrategyA());STRATEGY_MAP.put(B, new StrategyB());}public static Strategy getStrategy(String strategyKey) {if (strategyKey null || strategyKey.isEmpty()) {throw new IllegalArgumentException(strategyKey can not be empty);}return STRATEGY_MAP.get(strategyKey);} }3.总结 本篇主要讲述了工厂模式中的特例简单工厂模式并通过3种不同的场景来介绍这种模式存在的意义有以下几方面 封装对象创建过程 将对象的创建过程封装工厂类中使用者无需了解具体产品的创建细节只需调用工厂类提供的静态方法即可得到所需的产品对象。这样可以隐藏产品类的具体实现降低耦合度。控制逻辑集中 将复杂对象的创建对象逻辑集中在工厂类中如果需要修改或扩展产品类型时只需要修改工厂类中的代码。这使得添加新产品或者调整产品创建逻辑更加方便、集中管理也有利于系统的维护和版本升级组合其他模式满足特定的需求 在某些应用场景中如根据参数动态选择不同类型的对象实例化简单工厂单例提供简洁有效的解决方案避免了直接使用 new 关键字创建对象带来的硬编码问题。 最后虽然简单工厂模式在一定程度上提高了灵活性和可维护性但它也有其局限性例如违反了开闭原则每增加一个新产品就需要修改工厂类的代码。 但瑕不掩瑜简单工厂模式在很多简单场景下发挥着重要的作用。
http://www.zqtcl.cn/news/184661/

相关文章:

  • html mip 网站桂林市临桂区
  • 做网站如何月入10万建行app怎么注册登录
  • 建设一个旅游网站毕业设计建设网站的功能定位是什么原因
  • wordpress网站导航模板杭州建设网站的公司
  • 如何做视频解析网站wordpress 关闭评论
  • 安福网站建设微信开发者工具怎么下载
  • 网罗设计网站威海网页设计制作公司
  • 网站用cmswordpress插件怎么做
  • 如何办好公司网站元器件网站搭建
  • 建设领域行政处罚查询网站wordpress数据库发文章
  • 怎么做网页的多开器宿迁seo优化
  • 别人帮做的网站怎么修改病句店铺引流的30种方法
  • 网站备案幕布怎么申请绍兴cms建站模板
  • 做网站熊掌号软件设计公司排名
  • 深圳 做网站学做西点的网站
  • 静态网站安全性百度服务平台
  • 网站vi设计公司网站建设app
  • 书店网站建设策划书总结每天看七个广告赚40元的app
  • 做网站的属于什么专业成都广告制作安装公司
  • 天津市网站建设公司网站制作费用
  • 网站制作公司 郑州wordpress图片中文不显示解决
  • 网站建设模式有哪些方面jquery做的装修网站
  • 佛山手机建网站企业网站公司单位有哪些
  • 给企业做网站的平台有没有专门做衣服搭配的网站
  • 青岛本地网站最近军事新闻大事
  • 潍坊哪里有做360网站的成都官微最新发布
  • 还有哪些网站可以做淘宝活动企业建设网站的方式
  • 上海技术公司做网站2022引流人脉推广软件
  • 网站排名优化技术安徽省城乡和建设厅网站
  • 平阴县建设工程网站英文网站模板制作