1.设计模式-简单工厂模式

读大话设计模式的笔记,通过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绘制

相关推荐
To_OC13 小时前
从一行入口代码啃透 NestJS:工厂模式、装饰器和依赖注入是怎么串起来的
后端·设计模式·nestjs
东方小月15 小时前
从零开发一个 Coding Agent(十二):实现版本化 JSONL 与真实 CLI 入口
前端·设计模式·前端框架
程序员贺加贝16 小时前
轻制造SaaS的生产闭环建模-BOM工单领料报工质检与入库
java·设计模式·架构
嘟嘟071719 小时前
SDD 规范驱动开发:从 vibe coding 崩盘到"两次创造"
设计模式·代码规范·vibecoding
无凭20 小时前
拆解 DeerFlow Memory:Agent 的长期记忆到底怎么做?
人工智能·设计模式
AI大法师1 天前
品牌焕新不只换 Logo:捷豹案例里的触点重构方法
大数据·人工智能·设计模式·新媒体运营
AI人工智能+电脑小能手2 天前
大白话说Java设计模式-23-桥接模式(源码剖析篇)
java·设计模式·jdbc·桥接模式·源码分析·awt·java logging
嘟嘟07172 天前
TypeScript 工具类型通关:Pick、Omit、Partial、Record 区别与 Omit 等价实现一次讲清
设计模式·面试·typescript
SL_staff2 天前
中小离散制造如何用工艺路线模板解决‘人走流程丢’——JVS-APS 实践解析
java·设计模式·全栈
Asize2 天前
3 种设计模式 + DI:Nest.js 后端第一课
后端·设计模式·nestjs