读大话设计模式的笔记,通过C语言实现其中的代码
好代码特性:
- 可维护:结构清晰,方便修改
- 可复用:新功能也可使用老代码
- 可扩展:老代码可以增加代码实现新功能
- 灵活性:代码中的子功能可随意组合
大话设计模式一书中使用活字印刷术相比雕版印刷的创新类比,个人认为确实很形象。
示例场景
需求
"请用C++、Java、C#或VB.NET任意一种面向对象语言实现一个计算器控制台程序,要求输入两个数和运算符号,得到结果。"
需求分析
1.业务和界面分离
2.可能有增加运算方式的需要,代码需要增加运算方式方便
示例代码
c
#include <stdio.h>
#include <stdlib.h>
typedef struct Operation{
double numberA;
double numberB;
double (*GetResult)(struct Operation *);
} Operation;
// 依赖
double Add(Operation *op) {
printf("%lf %lf\n", op->numberA, op->numberB);
return op->numberA+op->numberB;
}
double Sub(Operation *op) {
return op->numberA-op->numberB;
}
// 简单工厂
Operation *InitOperation(double numberA, double numberB, char operate) {
Operation *res = (Operation *)malloc(sizeof(Operation));
res->numberA = numberA;
res->numberB = numberB;
printf("%lf %lf %c\n", numberA, numberB, operate);
switch(operate) {
case '+':
res->GetResult = Add;
break;
case '-':
res->GetResult = Sub;
break;
default:
res->GetResult = NULL;
}
return res;
}
UML图
使用draw.io绘制
