我这人是很提倡以练代学的,光说不练假把式,看我QQ昵称,just do it。
书上得来终觉浅,我有加设计模式的群,里面大佬很多,可是好像都是书上的大佬,我野很差反驳他们。有人愿意问我,我就两个字:实战。算法
最近接手了一个小项目,运动会的管理系统,正好我在学习设计模式,就接过来了。数据库
项目需求是这样的:设计模式
任务:参加运动会有n个学校,学校编号为1……n。比赛分红m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不一样的项目取前五名或前三名积分;取前五名的积分分别为:七、五、三、二、1,前三名的积分分别为:五、三、2;哪些取前五名或前三名由学生本身设定。(m<=20,n<=20)
运动项目能够包括50、100、200,400,1500米,跳高,跳远,标枪,铅球铁饼等。
一个选手信息:
姓名、选手编号、学校编号、性别、年龄。
一个运动项目信息:
项目名称、项目编号、适用性别、成绩排名规则。
一个选手参加运动项目成绩信息:
选手编号、项目编号、选手成绩、排名、得分。
运动会选手列表:数组名、总规模、当前选手个数
运动会运动项目列表:数组名、总规模、当前运动项目个数
运动会选手参加运动项目成绩列表:数组名、总规模、当前选手参加运动项目成绩个数数组
功能要求:
对选手信息、运动项目信息、成绩信息进行管理。可参考以下:
1) 能够输入各个项目的前三名或前五名的成绩;
2) 能统计各学校总分,
3) 能够按学校总分排序输出;
4) 能够按学校编号查询学校某个项目的状况;能够按项目编号查询取得前三或前五名的学校。
5) 数据存入文件并能随时查询
6) 规定:输入数据形式和范围:能够输入学校的名称,运动项目的名称。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
接手这个项目的时候,正好遇上技术人员跑路,耽误了一半工期。这要是正常状况,我就不会接,可是吧,奈何咱学墨家的,实在按不住心里一股正义冲动,就接下来了。奈何咱就是那种工做狂,彻夜加班就没让正义迟到。ide
转回正题。学习
看到这个项目需求,心里第一反应是什么?数据库。反正在我这里是不可能去用文本文件,要是逼我那我考虑一下。
那数据库,绕不开的就是单例模式了。好,单例模式定下来了。设计
接下来呢?设计模式六大原则熟吗?从原则出发,一切从根本抓起。
先是依赖倒置原则,面向接口,左右排开。
其次是单一职责,界面就是界面,数据库就是数据库。
以后这俩模块,它们要交互啊,要交互那用什么设计模式?刚开始个人想法是:中介+命令结合一下,而后晚上转念一想,要不中介+观察吧,真是被这中介给迷住了,由于界面好几个,数据库功能也好几个,可是它们都是单线联系的,都是单线联系的。对象
这点很重要,都是单线联系的,一个界面对应的后台算法就一个,那我为何不把需求封装成对象呢?那不就是一个命令模式的事情了。那这么多界面怎么办?简单工厂啊,难不成还要去搞个策略出来?简单工厂,简简单单才是真嘛。排序
那我找一下类图啊,画的比较粗糙一点,只可意会。接口