前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >以练代学设计模式(1)命令、单例、备忘录,与简单工厂

以练代学设计模式(1)命令、单例、备忘录,与简单工厂

作者头像
看、未来
发布2020-08-25 23:28:23
4930
发布2020-08-25 23:28:23
举报
文章被收录于专栏:CSDN搜“看,未来”

我这人是很提倡以练代学的,光说不练假把式,看我QQ昵称,just do it。 书上得来终觉浅,我有加设计模式的群,里面大佬不少,但是好像都是书上的大佬,我野不好反驳他们。有人愿意问我,我就两个字:实战。

最近接手了一个小项目,运动会的管理系统,正好我在学习设计模式,就接过来了。

项目需求是这样的:

任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20) 运动项目可以包括50、100、200,400,1500米,跳高,跳远,标枪,铅球铁饼等。 一个选手信息: 姓名、选手编号、学校编号、性别、年龄。 一个运动项目信息: 项目名称、项目编号、适用性别、成绩排名规则。 一个选手参加运动项目成绩信息: 选手编号、项目编号、选手成绩、排名、得分。 运动会选手列表:数组名、总规模、当前选手个数 运动会运动项目列表:数组名、总规模、当前运动项目个数 运动会选手参加运动项目成绩列表:数组名、总规模、当前选手参加运动项目成绩个数 功能要求: 对选手信息、运动项目信息、成绩信息进行管理。可参考如下: 1) 可以输入各个项目的前三名或前五名的成绩; 2) 能统计各学校总分, 3) 可以按学校总分排序输出; 4) 可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。 5) 数据存入文件并能随时查询 6) 规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称。

接手这个项目的时候,正好赶上技术人员跑路,耽误了一半工期。这要是正常情况,我就不会接,但是吧,奈何咱学墨家的,实在按不住内心一股正义冲动,就接下来了。奈何咱就是那种工作狂,彻夜加班就没让正义迟到。

转回正题。

看到这个项目需求,内心第一反应是什么?数据库。反正在我这里是不可能去用文本文件,要是逼我那我考虑一下。 那数据库,绕不开的就是单例模式了。好,单例模式定下来了。

接下来呢?设计模式六大原则熟吗?从原则出发,一切从根本抓起。 先是依赖倒置原则,面向接口,左右排开。 其次是单一职责,界面就是界面,数据库就是数据库。 之后这俩模块,它们要交互啊,要交互那用什么设计模式?刚开始我的想法是:中介+命令结合一下,然后晚上转念一想,要不中介+观察吧,真是被这中介给迷住了,因为界面好几个,数据库功能也好几个,但是它们都是单线联系的,都是单线联系的。

这点很重要,都是单线联系的,一个界面对应的后台算法就一个,那我为什么不把需求封装成对象呢?那不就是一个命令模式的事情了。那这么多界面怎么办?简单工厂啊,难不成还要去搞个策略出来?简单工厂,简简单单才是真嘛。

那我找一下类图啊,画的比较粗糙一点,只可意会。

啊,能意会吧。

后来呢,客户又加了个需求,就是界面回滚。那怎么搞,当然,这个需求我没满足人家,这两天实在是烦。

业务回滚嘛,备忘录嘛,没得跑了。我这类图我都准备好了:

看嘛,备忘录。后面我可能会和朋友再走一次这个流程,那会儿会把备忘录功能加上去。

至此,这个项目解耦就很完备了嘛,开工,干活,一天一夜我就解决了。

真的,不拼一回,我一直以为这种项目我要做三天。

题外话:这些天我都很闷,在离开阴影的时候,总是会格外的痛苦。但是我的朋友们也没有放弃我,我很感谢他们。 今天我看到一篇博客:当我的人生彻底转折时,我还以为那只是平常的一天。 是啊,在培训敲代码前,我学过博弈论,会演讲,学过谈判,了解一些金融知识,我很喜欢这些。但是编程之后认识的朋友们都把我当成不爱说话的码农,其实我还是很失落,甚至有时候就想,这样的机器人生活,我喜欢?我不喜欢这种不咸不淡的感觉,每天固定写什么,学什么,好像一切都被安排好了。我一直想写这篇文章,一直想去骑行,但是都被搁浅了。 我不干了,我要追随自己的内心,接项目,只是因为我想接,写博客,只是因为我想写,有朋友交,只是因为我愿意,没别的意思,我自己要变好,这才是解放时间最值的方式。

之前想不通,我也不知道为什么,就是想不通。现在想通了,亏的又不是我,我在努力,每天都不一样。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/06/07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档