码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 设计模式——开闭原则


    如今想设计这样的一个计算器类,对提交上来的数据进行运算并返回结果:

    1. class calculation
    2. {
    3. public:
    4. calculation(int a, int b, string op) :_a(a), _b(b), _op(op)
    5. {};
    6. int getret()
    7. {
    8. if (_op == "+")
    9. return _a + _b;
    10. if (_op == "-")
    11. return _a - _b;
    12. if (_op == "*")
    13. return _a * _b;
    14. if (_op == "/")
    15. return _a / _b;
    16. }
    17. private:
    18. int _a;
    19. int _b;
    20. string _op;
    21. int _ret = 0;
    22. };
    23. void test()
    24. {
    25. calculation* ca1 = new calculation(1, 1, "+");
    26. cout << ca1->getret()<
    27. calculation* ca2 = new calculation(1, 1, "*");
    28. cout << ca2->getret()<
    29. }
    30. int main()
    31. {
    32. test();
    33. return 0;
    34. }

    但是这段代码存在问题:如果想对该计算器类增添新的功能,比如说取余或者开方等等。那么就需要修改函数内的代码,这样就导致了一个问题:我们在修改代码的时候可能会出错,导致一系列后果,这就是所谓的高耦合。但是我们想到的是低耦合的代码。所以可以将不同的运算分别写在一个类中。这样就避免了上述问题:

    1. #include
    2. using namespace std;
    3. class getretClass
    4. {
    5. virtual int getret() = 0;
    6. };
    7. class Plus:public getretClass
    8. {
    9. public:
    10. Plus(int a, int b) :_a(a), _b(b) {};
    11. virtual int getret()
    12. {
    13. return _a + _b;
    14. }
    15. private:
    16. int _a;
    17. int _b;
    18. };
    19. class Minus:public getretClass
    20. {
    21. public:
    22. Minus(int a, int b) :_a(a), _b(b) {};
    23. virtual int getret()
    24. {
    25. return _a - _b;
    26. }
    27. private:
    28. int _a;
    29. int _b;
    30. };
    31. // 其他运算省略了
    32. void test()
    33. {
    34. Plus* plus = new Plus(1, 2);
    35. cout << plus->getret() << endl;
    36. Minus* minus = new Minus(2, 1);
    37. cout << minus->getret() << endl;
    38. }
    39. int main()
    40. {
    41. test();
    42. return 0;
    43. }

  • 相关阅读:
    python学习笔记(05)---(内置容器-列表)
    git stash/git fetch/git rebase/git cherry pick/git reset
    Qt/C++音视频开发71-指定mjpeg/h264格式采集本地摄像头/存储文件到mp4/设备推流/采集推流
    知行合一的时候
    C语言-找鞍点
    SpringCloud进阶-消费者模块
    paddlepaddle2.6,paddleorc2.8,cuda12,cudnn,nccl,python10环境
    PowerQuery领域的经典之作“猴子书“中文版来啦!
    【教程】部署apprtc服务中安装google-cloud-cli组件的问题及解决
    消息队列与快递柜之间的奇妙关系
  • 原文地址:https://blog.csdn.net/qq_64863535/article/details/136431568
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号