首页 > 其他分享 >5月12日总结

5月12日总结

时间:2023-05-12 22:56:18浏览次数:34  
标签:总结 章节 12 代码 code Split 100 设计模式

对工厂模式一次感悟

从开始接触设计模式的“什么都可以用设计模式去设计”,到接触一段时间之后的“用什么设计模式,直接莽就是了”。一直到现在,对设计模式的认知一直都处在一个模糊的状态。之前虽然也自己尝试在项目中使用一些设计模式,但总是体会不到设计模式在实际使用中的好处,直到最近,接触到了一种业务场景,非常适合使用工厂模式去实现的业务场景,着实耐不住心中的激动,一定要记录下来。。。

之前对工厂设计模式的认知一直是:这不就是简单的i根据不同的f--else的分支,创建不同的实现类嘛,如果需要扩展,根据不同的情况再去扩展不同的实现类而已嘛,这有什么难的嘛...,想来,这样的理解倒也不能说错,只是感觉非常的假大空。

接下来 我们从业务角度出发,设身处地的去感受使用设计模式和不使用设计模式的区别。

假设:我们的业务场景如下
复制代码

/**
* 既定业务场景:
* 前情提要:
* 我们需要做一个文件上传解析的功能,假设现在文件已经上传上来,我们需要对数据进行解析,将数据拆解
*
* 需求:
* 假设是一个目录结构,按照章节的不同,我们总共分为700章,每一章的目录结构层级都不相同。
* 例200章如下所示:
* 名称:200章-架构-思想-设计模式-工厂模式
* code:200-JG-SX-SJMS-GCMS
* 例100章如下所示:
* 名称:100章-技术-C#-委托
* code:100-JS-C#-Delegate
*
* 假设用户上传的时候,只会传进来Code,我们需要根据Code获取到章节、类别。
* 现知道规则如下:
* 1.所有的章节code,第一个字符为章节
* 2.200章倒数第二,第三位为类别,100章倒数第三位为类别。
*/

复制代码

我们现在只有一百章和二百章的数据结构和处理规则,但是领导说,我们这个东西,肯定是要把所有的章节都进行处理的。我们先来看一下不使用设计模式的处理方式
复制代码

1 List codeList = new List();
2 codeList.Add("200-JG-SX-SJMS-GCMS");
3 codeList.Add("100-JS-C#-Delegate");
4 foreach (var code in codeList)
5 {
6 string Chapter = code.Split('-')[0];
7 if (Chapter.Equals("100"))
8 {
9 string chapter100 = code.Split('-')[0];
10 string Type100 = code.Split('-')[1];
11 Console.WriteLine($"code:{code},章节:{chapter100},类型:{Type100}");
12 }
13 else if (Chapter.Equals("200"))
14 {
15 string chapter400 = code.Split('-')[0];
16 string Type400 = $"{code.Split('-')[2]}-{code.Split('-')[3]}";
17 Console.WriteLine($"code:{code},章节:{chapter400},类型:{Type400}");
18 }
19 }

复制代码

处理思路是先循环集合,然后拆出来章节。根据章节去选择不同的分支。假设我们再有不同的章节,再添加elseIf就可以了。这个例子处理比较简单,代码看起来也不是很乱,但是如果我们的每一个章节的处理逻辑都比较复杂的时候,代码会乱成一团,首先不美观,其次。我们如果要新增不同的分支,在原有代码上再加分支,分支变多以后,代码会变得很长,别人会难以理解。好处是代码结构清晰,便于理解

如果我使用工厂模式去创建:
复制代码

public interface Idisassemble

标签:总结,章节,12,代码,code,Split,100,设计模式
From: https://www.cnblogs.com/lmyy/p/17396485.html

相关文章

  • 5月11日总结
    初级篇AOP是什么?Aspect-orientedProgramming(AOP)即面向切面编程。简单来说,AOP是一种编程范式,允许我们模块化地定义横跨多个对象的行为。AOP可以帮助我们将应用程序的关注点分离,使得代码更加清晰、易于维护和扩展。大白话:在方法执行前后运行指定代码,比如日志记录、事务开......
  • 2023.5.12——软件工程日报
    所花时间(包括上课):6h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习。我了解到的知识点:1.了解了一些数据库的知识;2.了解了一些python的知识;3.了解了一些英语知识;5.了解了一些Javaweb的知识;4.了解了一些数学建模的知识;6.了解了一些计算机网络的知识;......
  • day71(2023.5.12)
    1.JavaEE简介 2.服务器 3.Tomcat的使用 4.Tomcat下载与安装 5.Tomcat目录结构与介绍 6.Tomcat启动与关闭输入后,小猫出来啦! 7.Tomcat配置文件介绍 8.解决控制台乱码以及修改Tomcat监听端口 9.配置TomcatManage......
  • AtCoder Regular Contest 129 C Multiple of 7
    洛谷传送门AtCoder传送门首先\(\text{7777...777}\)(\(x\)个\(7\))对能被\(7\)整除子串数量的贡献是\(\frac{x(x+1)}{2}\)。把\(n\)分解成若干\(x_i\)使得\(\sum\limits_{i=1}^m\frac{x_i(x_i+1)}{2}=n\),表示每段\(x_i\)个\(7\)。怎么把它们组合在一起呢?一个......
  • 2023/5/12每日随笔
        今天,上午上了计算机网络,对于应用层进行了学习,介绍了域名系统,就是人为的标识对于ip地址的转化,紧接着就介绍了域名系统,对于域名系统进行查询的方法,后进行了概论论的学习,学了数理统计的几个分布,x2,t,f分布,下午在web上将对与学生管理系统的作业进行了书写,晚上出去了一趟,去了......
  • 5.12
    1#include<iostream>2usingnamespacestd;34template<classT>5classmypair{6Ta,b;7public:8mypair(Tfirst,Tsecond)9{10a=first;11b=second;12}13Tgetmax();14};1516......
  • 第一阶段冲刺总结(不被踢的理由)
    本组是第21组,组内的人数为三人,团队选择的项目开始是智能排班系统,之后考虑到其他情况换成了智能家居系统,第一阶段的冲刺之后我的组内排名是第三名。在第一阶段的工作之中,我做的工作的大多不是能看到太多的实际性内容,或者说更多情况下做的是团队的总体统方面:    在第一个......
  • Hugging News #0512:
    每一周,我们的同事都会向社区的成员们发布一些关于HuggingFace相关的更新,包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等,我们将其称之为「HuggingNews」,本期HuggingNews有哪些有趣的消息,快来看看吧!开源更新Transformers现已支持Meta的S......
  • 5.12 强制转换函数重载
    在 C++ 中,类型的名字(包括类的名字)本身也是一种运算符,即类型强制转换运算符。类型强制转换运算符是单目运算符,也可以被重载,但只能重载为成员函数,不能重载为全局函数。经过适当重载后,(类型名)对象这个对对象进行强制类型转换的表达式就等价于对象.operator类型名(),即变成对运算符......
  • 编程一小时2023.5.12
    #include<iostream>#include<cstring>#include<algorithm>#include<vector>#include<unordered_set>#pragmaGCCoptimize(2)#pragmaGCCoptimize(3)#definelfirst#definersecondusingnamespacestd;typedefpair<int,int>......