专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

工厂方法演进

  最近review代码,感觉工厂方法使用的不准确,正好以此为例聊一下工厂方法的演进。实例初始需求
  假设我们有一个需求,需要根据不同的信号做不同的事情,如做饭、吃饭。
  在此需求基础上,我们用Go实现比较简单,使用经典的简单工厂即可:创建一个interface,包含参数检查、执行动作创建做饭、吃饭类,实现interface中的两个函数
  因为信号不同行为不同,根据查表法与switch有什么区别?,为后期扩展方便,我们选择switch方式。需求进化
  后面我们发现需求变了,要增加洗碗、拖地,而且这两个的操作和做饭也很相似。
  这种情况下我们可以选择的方案有:复用做饭类,在里面通过if判断是洗碗还是拖地做饭、吃饭、洗碗、拖地完全独立,相互之间没有交集
  我们肯定选择方案2,使用下面两个技巧使代码高内聚、低耦合使用基类:如洗碗、拖地都需要用水清扫,这些相同操作,在基类中实现,洗碗、拖地类继承基类提取公因子,将各个类共同的功能放到框架中,如在做之前都吼了一嗓子,我不想工作简单工厂实现
  关于工厂模式,大家可以看一下我的这篇文章Go设计模式(7)工厂模式。简单工厂方法的UML图如下:
  对于初始需求的代码实现如下所示:packagemainimportfmtAuthor:JasonPangDescription:typeLifeinterface{CheckParams()error参数检查Do()error执行动作}typeCookstruct{}Author:JasonPangDescription:做饭参数检查receivercreturnerrorfunc(cCook)CheckParams()error{fmt。Println(cook检查参数,食材准备完毕)returnnil}Author:JasonPangDescription:开始做饭receivercreturnerrorfunc(cCook)Do()error{fmt。Println(不想工作)fmt。Println(开始做饭)returnnil}typeEatstruct{}Author:JasonPangDescription:吃饭参数检查receivercreturnerrorfunc(cEat)CheckParams()error{fmt。Println(eat检查参数,饭已做好,碗筷放好)returnnil}Author:JasonPangDescription:开始吃饭receivercreturnerrorfunc(cEat)Do()error{fmt。Println(不想工作)fmt。Println(开始吃饭)returnnil}Description:简单工厂typeFactorystruct{}func(simpleFactory)create(extstring)Life{switchext{casecook:returnCook{}caseeat:returnEat{}}returnnil}funcmain(){简单工厂使用代码fmt。Println(简单工厂)factory:Factory{}life:factory。create(cook)iflife!nil{life。CheckParams()life。Do()}}简单工厂演进实现
  需求演变之后,代码实现如下:packagemainimportfmtAuthor:JasonPangDescription:typeLifeinterface{CheckParams()error参数检查Do()error执行动作}Author:JasonPangDescription:基类typeBaseLifestruct{}Author:JasonPangDescription:参数检查receivercreturnerrorfunc(cBaseLife)CheckParams()error{fmt。Println(通用参数检查)returnnil}Author:JasonPangDescription:开始做饭receivercreturnerrorfunc(cBaseLife)Do()error{fmt。Println(用水处理)returnnil}typeCookstruct{}Author:JasonPangDescription:做饭参数检查receivercreturnerrorfunc(cCook)CheckParams()error{fmt。Println(cook检查参数,食材准备完毕)returnnil}Author:JasonPangDescription:开始做饭receivercreturnerrorfunc(cCook)Do()error{fmt。Println(开始做饭)returnnil}typeEatstruct{}Author:JasonPangDescription:吃饭参数检查receivercreturnerrorfunc(cEat)CheckParams()error{fmt。Println(eat检查参数,饭已做好,碗筷放好)returnnil}Author:JasonPangDescription:开始吃饭receivercreturnerrorfunc(cEat)Do()error{fmt。Println(开始吃饭)returnnil}Author:JasonPangDescription:洗碗typeWashstruct{BaseLife}typeMopstruct{BaseLife}func(cMop)CheckParams()error{fmt。Println(mop检查参数,拖把是否存在)returnnil}Description:简单工厂typeFactorystruct{}func(simpleFactory)create(extstring)Life{switchext{casecook:returnCook{}caseeat:returnEat{}casewash:returnWash{}casemop:returnMop{}}returnnil}funcEchoBeforeDo(){fmt。Println(不想工作)}funcmain(){简单工厂使用代码fmt。Println(简单工厂)factory:Factory{}life:factory。create(mop)iflife!nil{life。CheckParams()EchoBeforeDo()life。Do()}}
  输出:myprojectgorunmain。go简单工厂cook检查参数,食材准备完毕不想工作开始做饭myprojectgorunmain。go简单工厂eat检查参数,饭已做好,碗筷放好不想工作开始吃饭myprojectgorunmain。go简单工厂通用参数检查不想工作用水处理myprojectgorunmain。go简单工厂mop检查参数,拖把是否存在不想工作用水处理
  大家可以看到,这种方案即保证了各个操作之间的独立,又复用了共同代码(通过基类和提取公因子)。总结
  使用工厂方法,有两个检验标准具体产品类不应该相互之间关联产品类里也不应该有相同的代码
  随着对业务的理解,区分出变与不变的内容,不变的内容需要整合到框架中,不应该在各个产品类里。
  产品类只需关注自己的逻辑,按照接口要求处理输入和返回值。这样今后即使有新功能接入,开发者也不需要关心整体框架,上手速度快、出问题的概率低。
  如果有默认的逻辑操作能跑通整个流程,最好有一个基类实现这个逻辑,这样就能最大程度的进行复用。
  开发过程中需要随着业务的变化和自己对业务的理解不断重构代码,这样才能让代码不成为屎山。但很多同学可能不敢重构,怕引起更多问题。其实这就和单元测试、自动化测试等关联起来了,只要质量保障的好,才能更放心的修改。我认为质量保障就是内功了,需要不断的坚持、不松懈,需要团队有很强的执行力,这是很难短时间被学去的,这便是护城河。
  代码位置:https:github。comshidawuhenasapblobmastercontrollerdesignfactory。go最后
  大家如果喜欢我的文章,可以关注我的公众号(程序员麻辣烫)
  我的个人博客为:https:shidawuhen。github。io
  往期文章回顾:设计模式招聘思考存储算法系列读书笔记小工具架构网络Go语言

美国对科技的看法?拜登上台以后,他有一个所谓私营的智库,他其实是一个研究机构,他给拜登做一份研究报告,这成为了拜登的关于美国科技的一个国策。进入智库的都是一些it行业重量级的人物,比如说甲骨文的ce杜锋卸任国家队主教练,其实与他的执教能力和争议没有太大关系2019年10月31日,广东男篮主教练杜锋正式接任成为中国男篮主教练,当时的情况是中国队在家门口举办的男篮世界杯上表现糟糕,无缘直通东京奥运会,李楠下课。杜锋指导算是临危受命。在过习近平同印尼总统佐科举行会谈当地时间11月16日晚,国家主席习近平在巴厘岛同印度尼西亚总统佐科举行会谈。新华社记者李学仁摄当地时间11月16日晚,国家主席习近平在巴厘岛同印度尼西亚总统佐科举行会谈。两国元首就选sanag塞那气传导蓝牙耳机,享受运动听觉盛宴绝大多数人在运动过程当中都喜欢听听歌或者是听听书,想要在运动过程中享受听觉盛宴,耳机的选择当然是至关重要的。那么到底该选择哪个品牌的耳机才更好呢?sanag塞那A30SPROMAX南宁一国企思路打开了买房赠10年地铁自由经济观察网记者陈月芹编辑张雅楠楼市花样促销再出奇招。11月13日,南宁轨道地产集团有限责任公司(以下简称南宁轨道地产)发布微信,推出购房享受10年地铁自由活动。南宁轨道地产表示,凡人最大的愚蠢,是怨天尤人人的一生,逃脱不了与人接触,难免在此之间出现一些碰撞摩擦。当遇到这些事情的时候,总有人会怨天尤人,却不会反过来思考自己到底是哪里出现问题。遇事时,倘若不能从自己身上找原因,而是一味有一种爱,叫想念你一辈子头条创作挑战赛一颗流星划过天空,合起双手许下一个心愿,愿我最爱的人幸福,愿我最爱的人平安,我站在星空下,把你深深地想念。有一种深爱,叫想念你一生,从爱上你的那一刻,就注定了一生的深与人交往,真正聪明的人,往往会装穷文丨桃小菁春风十里不如你,小菁在这里,等着你!对于金钱,人们总是有固执地追求,因为金钱决定了地位,金钱保障了生活。但在追求财富的过程中,很多人却走上了歪门邪道,试图靠着不劳而获来实当她跟人戏喝交杯酒后,他仍在暗恋路上徘徊有意思吗?杨绛先生忠告也清流如果别人说你两句,你就受不了,被两句话干扰得吃不好,睡不好,你想想你得有多脆弱啊!有时,自己真得脆弱到不行。何止两句话,一个小动作,也能让暗恋人彻夜难眠。经过一番老师,他脑子有问题,是个傻子这样的孩子莫名地让人心疼老师,小雨哭了!这一声,打破了原本安静的教室。小雨是托管班级里比较讨人喜欢的一个孩子。那天在托管班里,大家正在全神贯注地跟着老师做科学实验课,突然有孩子举手说,老师,小雨哭了。我循一个人变得不想说话,也不愿跟人来往,往往意味着三件事每个人每个阶段,都会遇到新事情,得到新感悟理解。随着年龄的增长,和阅历的增加,一个人很有可能,从社牛变社恐,从冲动变理智,从聒噪变沉默,从轻浮变成熟。大部分时候都意味着,这个人正在
只要做到3件事情老美可解围高通货膨胀的压力,可是有心无力众所周知,5月美国居民消费价格指数(CPI)同比涨幅达到8。6,处于40多年来的高位,解决这个高通胀已成为美国表面上最迫切的任务。其实,老美只要做到3件事情,就能有效缓解高通胀!可21个国家压力情绪上升超过10,如何实现心态均衡?这个世界正比以往任何时候更悲伤更愤怒更恐惧。盖洛普2020年度全球情绪状况报告显示,全球受访者的压力悲伤愤怒和恐惧4项负面情绪指标均上升至最高水平,其中,压力情绪的上升幅度最大,较ampampquot阿伦压力大,病急乱投医ampampquot!率蓝营ampampquot6连败ampampquot的朱立伦,真能靠ampampquot亲美ampampquot救选情?中国国民党主席朱立伦日前访美,声称国民党是亲美政党,持续对抗共产主义,还称九二共识是没有共识的共识云云。也许,正可谓阿伦压力大,病急乱投医。自去年9月回锅国民党主席以来,朱已在各项湖南出现双胞胎村,村子里双胞胎出生率贼高,村民村子的风水好在湖南省石门县的鹤山村,有着一个神奇的现象,在别的地方很少见的双胞胎,在这里几乎随处可见,不出十米就能遇到好几对。要知道全世界的双胞胎出生率也不过1到2,而这个村子,人口不过千人,全国哪里的啤酒最好喝?经过评选,6个地方比较出名,有你家乡吗啤酒,是生活中常见的一种酒类,不管是吃饭应酬还是休闲娱乐的时候都少不了啤酒。喝啤酒是不分季节的,但夏天喝啤酒最惬意。天蒙蒙黑,晚风吹拂,三五好友聚在一起,吃着烧烤,喝着啤酒,侃着家2015年,江西2个村子靠诈骗发家致富,300名干警将其连根拔起2015年11月29日凌晨,天刚蒙蒙亮,江西省余干县石溪村里一片寂静,村民们都还沉浸在梦乡中。忽然,一阵阵急促的脚步声传来,只见狭窄的村中道路上满是佩戴了防爆枪身穿防弹衣的干警,悄唐山受伤女子去世?妇联和事件曝光者辟谣,救护车内场景令人疑惑没人想到在光天化日朗朗乾坤之下,竟然发生了几名男子围殴女子的残暴行为。古语有云,好男不跟女斗。几千年的文化传统当中,妇女儿童优先都深扎在我们的心中。女性作为力量上的弱势群体,男性理谭晶现身街边吃臭豆腐!穿超短裤露白嫩长腿,脚踝青筋凸出太纤细近日,歌唱家谭晶在社交平台更新九图动态,配上一段文案称回到家乡我的出生地侯马越来越美好的小城,满满的回忆。图片中她打扮潮流坐在街边吃小吃,接地气的举止引得不少网友的关注以及热议。图音乐魔王谭晶回山西故乡,素颜坐路边吃臭豆腐,毫无偶像包袱6月16日,国家一级演员歌唱家谭晶在社交平台上分享了自己最近回山西侯马故乡探亲时的日常照片,并且配文回到家乡我的出生地侯马,越来越美好的小城,满满的回忆。在动态中,她还分享了自己回中国女排惨败后迎来好消息!医生透露朱婷恢复得非常好,或将回归2022年世界女排联赛第二周已结束,中国女排在两连胜之后,面对美国女排和日本女排均败下阵来,分别以03输给美国女排,13输给日本女排,尤其是面对日本女排,相对于输掉比赛,更加令人担悲痛!95岁艺术家因病去世,生前露面精神好,曾创作难忘今宵饿了吗?戳右边关注我们,每天给您送上最新出炉的娱乐硬核大餐6月20日,演艺圈又传噩耗!曾创作了难忘今宵我的祖国让我们荡起双桨等知名歌曲的老艺术家乔羽不幸逝世,享年95岁。据悉,乔羽
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网