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