范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

面试的时候别再说你不会设计模式了

  前言
  最近在设计一个对某个中间件的测试方案,这个测试方案需要包含不同的测试逻辑,但相同的是需要对各个环节进行记录;比如统计耗时、调用通知 API 等相同的逻辑。
  如果每个测试都单独写这些逻辑那无疑是做了许多重复工作了。
  基于以上的特征很容易能想到 模板方法 这个设计模式。
  这是一种有上层定义框架,下层提供不同实现的设计模式。
  比如装修房子的时候业主可以按照自己的喜好对不同的房间进行装修,但是整体的户型图不能做修改,比如承重墙是肯定不能打的。
  而这些固定好的条条框框就是上层框架给的约束,下层不同的实现就有业主自己决定;所以对于整栋楼来说框架都是固定好的,让业主在有限的范围内自由发挥也方便物业的管理。 具体实现
  以我这个案例的背景为例,首先需要定义出上层框架: Java
  Event  接口:public interface Event {      /**      * 新增一个任务      */     void addJob();      /**      * 单个任务执行完毕      *      * @param jobName    任务名称      * @param finishCost 任务完成耗时      */     void finishOne(String jobName, String finishCost);      /**单个任务执行异常      * @param jobDefine 任务      * @param e 异常      */     void oneException(AbstractJobDefine jobDefine, Exception e);      /**      * 所有任务执行完毕      */     void finishAll(); }     public void start() {         event.addJob();         try {             CompletableFuture.runAsync(() -> {                 StopWatch watch = new StopWatch();                 try {                     watch.start(jobName);                     // 不同的子业务实现                     run(client);                 } catch (Exception e) {                     event.oneException(this, e);                 } finally {                     watch.stop();                     event.finishOne(jobName, StrUtil.format("cost: {}s", watch.getTotalTimeSeconds()));                 }             }, TestCase.EXECUTOR).get(timeout, TimeUnit.SECONDS);         } catch (Exception e) {             event.oneException(this, e);         }     }      /** Run busy code      * @param client      * @throws Exception e      */     public abstract void run(Client client) throws Exception;
  其中最核心的就是 run 函数,它是一个抽象函数,具体实现交由子类完成;这样不同的测试用例之间也互不干扰,同时整体的流程完全相同: 记录任务数量 统计耗时 异常记录
  等流程。
  接下来看看如何使用:         AbstractJobDefine job1 = new Test1(event, "测试1", client, 10);         CompletableFuture c1 = CompletableFuture.runAsync(job1::start, EXECUTOR);          AbstractJobDefine job2 = new Test2(event, "测试2", client, 10);         CompletableFuture c2 = CompletableFuture.runAsync(job2::start, EXECUTOR);          AbstractJobDefine job3 = new Test3(event, "测试3", client, 20);         CompletableFuture c3 = CompletableFuture.runAsync(job3::start, EXECUTOR);          CompletableFuture all = CompletableFuture.allOf(c1, c2, c3);         all.whenComplete((___, __) -> {             event.finishAll();             client.close();         }).get();
  显而易见  Test1~3  都继承了 AbstractJobDefine  同时实现了其中的 run  函数,使用的时候只需要创建不同的实例等待他们都执行完成即可。
  以前在 Java 中也有不同的应用:
  https://crossoverjie.top/2019/03/01/algorithm/consistent-hash/?highlight=%E6%A8%A1%E6%9D%BF%E6%96%B9%E6%B3%95#%E6%A8%A1%E6%9D%BF%E6%96%B9%E6%B3%95 Go
  同样的示例用 Go 自然也可以实现:
  func TestJobDefine_start(t *testing.T) {  event := NewEvent()  j1 := &JobDefine{   Event:   event,   Run:     &run1{},   JobName: "job1",   Param1:  "p1",   Param2:  "p2",  }  j2 := &JobDefine{   Event:   event,   Run:     &run2{},   JobName: "job2",   Param1:  "p11",   Param2:  "p22",  }  j1.Start()  j2.Start()  for _, ch := range event.GetChan() {   <-ch  }  log.Println("finish all")  }  func (r *run2) Run(param1, param2 string) error {  log.Printf("run3 param1:%s, param2:%s", param1, param2)  time.Sleep(time.Second * 3)  return errors.New("test err") }  func (r *run1) Run(param1, param2 string) error {  log.Printf("run1 param1:%s, param2:%s", param1, param2)  return nil }
  使用起来也与 Java 类似,创建不同的实例;最后等待所有的任务执行完毕。 总结
  设计模式往往是对某些共性能力的抽象,但也没有一个设计模式可以适用于所有的场景;需要对不同的需求选择不同的设计模式。
  至于在工作中如何进行正确的选择,那就需要自己日常的积累了;比如多去了解不同的设计模式对于的场景,或者多去阅读优秀的代码,Java 中的  InputStream/Reader/Writer  这类 IO 相关的类都有具体的应用。

晨读夏季易疲劳,湿气重?这么做祛暑生津还化湿炎炎的夏日又到了,怎么才能祛暑?有人觉得祛暑就是清热,真的是这样吗?要想搞清这个问题,我们先要了解一下什么是暑热?暑热不同于普通的热。它的伤身之处也远大于普通的热,为什么这么说呢?一图读懂丨夏日吃西瓜,如何快速找到又红又甜的瓜?提醒西瓜虽好吃但这三类人群切忌贪多哦糖尿病患者西瓜含有一定糖分,糖尿病患者如果吃西瓜过量,会导致血糖升高尿糖增多等症状,严重的还会出现酮症酸中毒昏迷反应。慢性胃炎患者西瓜甘寒,食入这种西红柿,千万别吃!西红柿营养价值丰富吃西红柿有很多好处尤其是夏天不少人喜欢生吃西红柿可近期,网络上却有一种说法有些西红柿不能吃会引起恶心呕吐等中毒症状甚至可能会引起死亡还说西红柿熟吃营养能翻倍真的是三伏天不能多吃的水果三伏天了,提醒大家养生开始了初伏,7月16日一7月25日中伏,7月26日一8月14日末伏,8月15日一8月25日三伏天到了,全年温度最高的一段时期,在这期间容易上火和食欲下降,我们别让器官提早衰老,一定拒绝这10个习惯!别等坏了才想起要保养来源健康时报健康时报权威健康资讯,因专业而信赖!想要一个健康的身体,正确的养生方法必不可少。但一些错误的生活习惯,直接影响身体健康,一起看看占了几条。曹子豪摄1。不想让心脏增加负担3个穴位常按,或能保养脾胃,长期坚持,脾胃会感激你中医认为,脾胃乃后天之本,人体生命活动有赖于脾胃运输营养物质到五脏六腑,是生命健康的轴心力量,确保运输畅通,则对全身大有益处。春天是万物生长的季节,也是阳气上升的时节。而阳气旺盛,药水泡过的葡萄干真的会烧胃吗?葡萄干究竟能不能直接吃?问你一个问题,你吃葡萄干时会用水洗一下吗?你可能看到过网络上一些视频,用清水浸泡葡萄干后,清洗后的水竟然变浑浊了,面对着这碗水,让你陷入了沉思,一时之间不知道该洗还是不该洗。洗的原一周带饭食谱,9道家常菜,好吃又省钱,比点外卖强多了对于上班的朋友来讲,午餐大都是吃食堂或者外卖。时间久了,发现吃来吃去也就那几样,往往还不是很贴合自己的口味。我这里给大家整理了9道家常菜,作为带饭食谱很不错,好做好吃又省钱,比点外那些越老越优雅的女人,身上全有3条线,收藏起来照着做在日本做过这样一个调查,当你在人群中第一眼看到一个人,觉得她非常美,绝对不是她画的妆,穿的服饰,做得漂亮的美甲,而是一个人端庄的姿势呈现出来的美。所以你看那些保持端庄姿态的女人,即安倍昭惠去寺庙为老公守灵,穿小黑裙优雅迷人,却无第一夫人风采小黑裙备受女性朋友喜欢,不挑年龄不挑身材,关键是还瘦身显瘦!前第一夫人安倍昭惠曾经穿着小黑裙美到了国外,她没有生育子女的身材别有一番风味,只是她以后再也没有机会了,因为老公安倍已经穷人为什么穷,富人为什么富?一个修桥的故事能告诉你答案穷人为什么穷,富人为什么富?每个人都想知道这个问题的答案。事实上,所有人拼其一生,忙忙碌碌一辈子,都是在为更好的生活而努力。每个人都希望自己在有生之年,让自己生活得更舒服,让父母生
我科学家探索鸟类头骨演化奥秘现生鸟类虽然没有手,但具有极其灵敏的喙,能够取代手完成大量精细的动作。研究认为,这是由于现生鸟类具有头骨可动性其头部的部分骨骼能够发生相互独立的运动。但是鸟类的始祖恐龙并不具备这样隐者考古2022不得不知的10大发现2022年10大惊人发现在澳大利亚发现古代雨林化石2022年1月,澳大利亚东南部发现的古代雨林的痕迹。在麦格拉斯公寓的1600万至1100万年前的化石在世界上非常罕见,可以确认中新被狂野的极低频吓到了!酷爱低音的毛毛虫原创文赖英智新音响NewAudiophile20221209酷爱低音的毛毛虫把李凯研称为毛毛虫实在不太礼貌,这是他小孩帮忙取的名字,结果毛毛虫在几个音响群中经常露脸,反而大家都不知头条十年,精彩无限,快乐永远2022生机大会我们这十年我是2015年下半年入驻今日头条的。头条十年,我伴随了它七年多,至今还在上面撒着欢,幸福着,快乐着。最初认识今日头条,缘于一个在广州打拼的广西年轻人。记得迅游主机加速盒(旗舰版)测评顶流游戏体验,好看又好用前不久,使命召唤战区2。0已经正式上线了,如果要我给这款游戏打分,我应该会打满分。相比于PUBG他的节奏更快打击感更强,相比于自家前作战区1。0,2。0的游戏内容变得更丰富画面更好好看的眉毛要靠眉弓撑起来,玻尿酸丰眉弓,立体感马上有很多求美者会关注自己的眉毛是否好看,但很少有人会注意到眉弓对眉毛甚至对整个面部的美观也会有所影响,即使是你拥有了好看的眉毛,也需要靠眉弓撑起来才会更具有美感。眉弓是面部的重要组成部杜锋儿子太幸福!2位体坛名帅给揉背踩腿,定居北京父子聚少离多近日,马晨菲更新了社交平台,晒出了非常温馨的一幕,杜锋的儿子虎头结束训练之后,外公马文广和外婆姚颖帮助虎头放松身体,其中姚颖跪在地上帮助外孙揉背,马文广则站着帮助外孙踩腿放松。能够达利的胡子能喷雾!联泰科技与北京工业大学合作再现艺术创意十分感谢松江企业上海联泰科技股份有限公司给予我们的技术支持,让我们的作品如此完美。前不久,在与联泰科技合作完成西班牙著名画家达利的上半身人像的创作后,北京工业大学张飞打印工作室相关实盘周记20221210,今年收益8,2020年至今总收益9经历了这一个多月的股市,应该能感受到市场情绪有多癫狂了。在我10月28日实盘周记中,实盘组合下跌超过50。过了40天实盘组合已上涨82,一个月的时间,企业还是那些企业,基本面会有如如何防止脱发?如何防止脱发?每天掉多少头发才算正常?如果你也经常出现这种情况,可以试试下面几种方法。首先,在洗头时,最好使用梳子梳头发,有利于促进头皮血液的流通。其次,不要经常使用吹风机。一不要哺乳期干货!开奶追奶堵奶一次说清楚母乳喂养不止对宝宝好且对妈妈自身恢复也大有好处都说妈妈伟大,不只是宫开十指的痛产后第二三天的生理性涨奶堵奶追奶才是最难的追奶多辛苦堵奶就有多难受所以今天这些过来人的经验开奶追奶堵奶