其他分享
首页 > 其他分享> > 以练代学设计模式(1)命令、单例、备忘录,与简单工厂

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

作者:互联网

在这里插入图片描述

我这人是很提倡以练代学的,光说不练假把式,看我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) 规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称。

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

转回正题。

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

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

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

那我找一下类图啊,画的比较粗糙一点,只可意会。
在这里插入图片描述

啊,能意会吧。

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

业务回滚嘛,备忘录嘛,没得跑了。我这类图我都准备好了:
在这里插入图片描述

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

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

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

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

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

标签:界面,项目,数据库,取前,单例,以练代学,设计模式
来源: https://blog.51cto.com/u_15197573/2772318