设计模式六大原则(1):单一职责(SRP)
2017-09-12 08:46
531 查看
0x00 什么是单一职责
实现单一功能,一个功能函数或者类只做一件特定的事,就叫做单一职责。
只是单纯的字面来解释什么是单一职责就太没意思了,所以我随便在网上找了一个c语言读写文件的小程序,在这里以代码的形式带大家了解设计模式原则。
0x01 冗余代码
定睛一看,这不是很正常的代码。重构代码先对代码进行分析和确定职责:
a.重构分析
1.我们要确定一件事的是 main作为主线程,只需要做业务调度。而现在运算,赋值,业务调度全部都耦合起来了,必须进行修改。
2.fopen("data.txt","r"); 和fopen("data.txt","w"); 阅读性欠佳,封装成两个单独的接口进行调用,可以解决阅读性和消除参数造成的上帝函数
b.确定职责和重构方案
1.main()主线程只做业务调用
2.封装文件读写接口
0x02 进行重构符合设计原则
1.main修改
2.职责功能的封装
#ifndef __FILE_FUNC_H_
#define __FILE_FUNC_H_
#define EXECUTE_SUCCESS 0
#define EXECUTE_FILT -1
/****
@Describe: 返回读文件句柄
@Parameter:pFilePath 读取的文件路径
@Return:NULL 获取文件操作句柄失败
!NULL 文件句柄
*/
FILE * ReadFileHandle(char* pFilePath);
/****
@Describe: 获取文件内的数据
@Parameter:fileHandle 文件读句柄
data 见数据放入的存储空间
@Return:EXECUTE_SUCCESS 读取成功
EXECUTE_FILT 读取失败
*/
int ReadFileData(FILE * fileHandle, char* data);
#endif
0x03 总结
看过后一定会觉得这样写代码麻烦死了,但是习惯总是要慢慢开始养成的。小练习和测试就是养成习惯的最后过程,做的小而精致。现在对这样写代码的好处进行;
1.人员流失。代码模块化,专业化。这样人员流失带来的损失降到最低。
2.可阅读性。代码最终目的是执行,但是执行的前提是给人阅读啊,不注重阅读性的程序员一定不是好的程序员。
3.可维护性。代不论项目能不能最终存活,都要维持一个可以维护的状态,毕竟不能挖坑害人和别人挖坑啊。
4.可扩展性。代码之间的耦合少,这样就不惧怕需求改动和功能增删。
实现单一功能,一个功能函数或者类只做一件特定的事,就叫做单一职责。
只是单纯的字面来解释什么是单一职责就太没意思了,所以我随便在网上找了一个c语言读写文件的小程序,在这里以代码的形式带大家了解设计模式原则。
0x01 冗余代码
#include <stdio.h> int main() { //下面是写数据,将数字0~9写入到data.txt文件中 FILE *fpWrite=fopen("data.txt","w"); if(fpWrite==NULL) { return 0; } for(int i=0;i<10;i++) fprintf(fpWrite,"%d ",i); fclose(fpWrite); //下面是读数据,将读到的数据存到数组a[10]中,并且打印到控制台上 int a[10]={0}; FILE *fpRead=fopen("data.txt","r"); if(fpRead==NULL) { return 0; } for(int i=0;i<10;i++) { fscanf(fpRead,"%d ",&a[i]); printf("%d ",a[i]); } getchar();//等待 return 1; }
定睛一看,这不是很正常的代码。重构代码先对代码进行分析和确定职责:
a.重构分析
1.我们要确定一件事的是 main作为主线程,只需要做业务调度。而现在运算,赋值,业务调度全部都耦合起来了,必须进行修改。
2.fopen("data.txt","r"); 和fopen("data.txt","w"); 阅读性欠佳,封装成两个单独的接口进行调用,可以解决阅读性和消除参数造成的上帝函数
b.确定职责和重构方案
1.main()主线程只做业务调用
2.封装文件读写接口
0x02 进行重构符合设计原则
1.main修改
int main() { int execute_status; char buf[4096]; memset(buf, 0,sizeof(buf)); FILE * rfHandle = ReadFileHandle("C:\\Users\\Reacher\\Desktop\\data.txt"); if (NULL == rfHandle) { printf("获取读句柄失败"); exit(1); } execute_status = ReadFileData(rfHandle, buf); if (-1 == execute_status) { printf("ReadFileData 读取数据失败"); exit(1); } return 0; }
2.职责功能的封装
#ifndef __FILE_FUNC_H_
#define __FILE_FUNC_H_
#define EXECUTE_SUCCESS 0
#define EXECUTE_FILT -1
/****
@Describe: 返回读文件句柄
@Parameter:pFilePath 读取的文件路径
@Return:NULL 获取文件操作句柄失败
!NULL 文件句柄
*/
FILE * ReadFileHandle(char* pFilePath);
/****
@Describe: 获取文件内的数据
@Parameter:fileHandle 文件读句柄
data 见数据放入的存储空间
@Return:EXECUTE_SUCCESS 读取成功
EXECUTE_FILT 读取失败
*/
int ReadFileData(FILE * fileHandle, char* data);
#endif
/**** @Describe: 返回读文件句柄 @Parameter:pFilePath 读取的文件路径 @Return:NULL 获取文件操作句柄失败 !NULL 文件句柄 */ FILE * ReadFileHandle(char* pFilePath) { if (NULL == pFilePath) { printf("ReadFileHandle 参数有问题"); return NULL; } FILE * handle = fopen(pFilePath, "r"); return handle; } /**** @Describe: 获取文件内的数据 @Parameter:fileHandle 文件读句柄 data 见数据放入的存储空间 @Return:EXECUTE_SUCCESS 读取成功 EXECUTE_FILT 读取失败 */ int ReadFileData(FILE * fileHandle, char* data) { if ((NULL == fileHandle) || (NULL == data)) { printf("ReadFileData参数有问题"); return EXECUTE_FILT; } char ch; int i = 0; while (EOF != (ch = getc(fileHandle))) { data[i] = ch; i++; } return EXECUTE_SUCCESS; }
0x03 总结
看过后一定会觉得这样写代码麻烦死了,但是习惯总是要慢慢开始养成的。小练习和测试就是养成习惯的最后过程,做的小而精致。现在对这样写代码的好处进行;
1.人员流失。代码模块化,专业化。这样人员流失带来的损失降到最低。
2.可阅读性。代码最终目的是执行,但是执行的前提是给人阅读啊,不注重阅读性的程序员一定不是好的程序员。
3.可维护性。代不论项目能不能最终存活,都要维持一个可以维护的状态,毕竟不能挖坑害人和别人挖坑啊。
4.可扩展性。代码之间的耦合少,这样就不惧怕需求改动和功能增删。
相关文章推荐
- 设计模式之六大原则——单一职责原则(SRP)
- 设计模式之六大原则——单一职责原则(SRP)
- 设计模式之六大原则——单一职责原则(SRP)
- 设计模式之六大原则——单一职责原则(SRP)
- 设计模式六大原则例子(二)-- 单一职责原则(SRP)例子
- 设计模式六大原则(二)-- 单一职责原则 ( SRP )
- [置顶] 设计模式之六大原则——单一职责原则(SRP)
- 设计模式六大原则——单一职责原则(SRP)
- 设计模式之六大原则——单一职责原则(SRP)
- IOS设计模式的六大设计原则之单一职责原则(SRP,Single Responsibility Principle)
- 设计模式值六大原则——设计模式之六大原则——单一职责原则(SRP)
- IOS设计模式的六大设计原则之单一职责原则(SRP,Single Responsibility Principle)
- IOS设计模式的六大设计原则之单一职责原则(SRP,Single Responsibility Principle)
- IOS设计模式的六大设计原则之单一职责原则(SRP,Single Responsibility Principle)
- 设计模式六大原则(1):单一职责原则SRP(Single Responsibility Principle)
- 设计模式六大原则—— 单一职责原则(SRP,Single Responsibility Principle)
- 设计模式之六大原则——单一职责原则(SRP)
- 设计模式六大原则之--单一职责原则(SRP)
- 设计模式六大原则之--单一职责原则(SRP)
- 设计模式六大原则(1):单一职责原则