码农知识堂 - 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. }

  • 相关阅读:
    Golang学习笔记
    趋势分析 | 如何选择适合超融合的备份方案?
    离线配置ohmyzsh nvim tldr conda ssh nvm
    SSO 基于token vue + element ui spring boot前端分离
    某电商商品搜索系统架构设计
    PLC中ST编程的星角降压启动
    风控——利用决策树挖掘策略规则
    软考 系统架构设计师系列知识点之软件可靠性基础知识(6)
    Java计算机毕业设计单车管理系统源码+系统+数据库+lw文档
    Flink中的时间和窗口操作
  • 原文地址:https://blog.csdn.net/qq_64863535/article/details/136431568
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号