当前位置: 首页 > news >正文

购物网站大全分类爬虫网站开发

购物网站大全分类,爬虫网站开发,免费制作图片带字 手机软件,网站数据分析建设单一职责原则#xff1a; 就一个类而言#xff0c;应该只有一个引起它变化的原因#xff0c;如果一个类承担的职责过多就等于把这些职责耦合在一起#xff0c;至少会造成以下两方面的问题#xff1a; 我们要去修改该类中的一个职责可能会影响到该类的其它职责。这种耦合…单一职责原则 就一个类而言应该只有一个引起它变化的原因如果一个类承担的职责过多就等于把这些职责耦合在一起至少会造成以下两方面的问题 我们要去修改该类中的一个职责可能会影响到该类的其它职责。这种耦合会导致脆弱的设计当变化发生时设计会遭受到意想不到的破坏。当客户端仅需要该对象的某一个职责时不得不将其他不需要的职责全都包含进来从而造成冗余代码或代码的浪费。 我们在设计一个类时要学会发现职责并把那些职责相互分离其实要去判断是否应该分离出一个类来并不难前面说过一个类应该只有一个引起它变化的原因如果你能想到其它的原因也能去改变这个类那么这个类就具有多于1个的职责就应该考虑类的职责分离。 在之前的这篇博客中https://blog.csdn.net/weixin_44049823/article/details/128907849我们实现的计算器实际上也用到了单一职责原则这里我们选出其中最经典的3.0版本和5.0版本来学习单一职责原则。 3.0版本计算器代码如下 #includeiostream using namespace std; #includestring//业务逻辑 //异常类用于处理异常情况 class opeException { public:void getMessage(){cout 您的输入有误 endl;} };//运算类用于处理运算 class Operation { public:Operation(string _num1, string _num2, string _ope) :num1(_num1), num2(_num2), ope(_ope){}//获取运算结果int getResult(){if (!(isStringNum(num1) isStringNum(num2) (ope || ope - || ope * || ope /)))throw opeException();if (ope ){re stoi(num1) stoi(num2);}else if (ope -){re stoi(num1) - stoi(num2);}else if (ope *){re stoi(num1) * stoi(num2);}else if (ope /){if (stoi(num2) ! 0){re stoi(num1) / stoi(num2);}elsethrow opeException();}return re;} private:int re;string num1;string num2;string ope;//判断一个字符串是不是数字bool isStringNum(string s){bool flag true;for (auto e : s)if (!(isdigit(e))){flag false;break;}return flag;} };//界面逻辑 int main() {try{string _num1 ;string _num2 ;string _ope ;cout 请输入左操作数 endl;cin _num1;cout 请输入右操作数 endl;cin _num2;cout 请输入操作符 endl;cin _ope;Operation operation(_num1, _num2, _ope);cout operation.getResult() endl;}catch (opeException ex){ex.getMessage();}return 0; }仅仅一个运算类Operation就实现了加减乘除4种功能很明显在这个类中我至少有4个原因去修改这个类我修改加法算法的时候可能会影响到其它的运算算法这个类的耦合太高且严重违反了单一职责原则。 修改后的5.0版本如下 #includeiostream using namespace std; #includestring//业务逻辑//异常类用于处理异常情况 class opeException { public:void getMessage(){cout 您的输入有误 endl;} };//运算类 class Operation {//判断一个字符串是不是数字bool isStringNum(string s){bool flag true;for (auto e : s)if (!(isdigit(e))){flag false;break;}return flag;}protected:bool isError(string _strNum1, string _strNum2, string _ope){if (!(Operation::isStringNum(_strNum1) Operation::isStringNum(_strNum2) (_ope || _ope - || _ope * || _ope /))){return false;}} public:virtual int getResult() 0; };//加法运算类 class addOperation :public Operation { private:string strNum1;string strNum2;string ope;int re; public:addOperation(string _strNum1, string _strNum2, string _ope) :strNum1(_strNum1), strNum2(_strNum2), ope(_ope), re(0) {}virtual int getResult() override{if (!isError(strNum1, strNum2, ope))throw opeException();elsere stoi(strNum1) stoi(strNum2);return re;} };//减法运算类 class subOperation :public Operation { private:string strNum1;string strNum2;string ope;int re; public:subOperation(string _strNum1, string _strNum2, string _ope) :strNum1(_strNum1), strNum2(_strNum2), ope(_ope), re(0) {}virtual int getResult() override{if (!isError(strNum1, strNum2, ope))throw opeException();elsere stoi(strNum1) - stoi(strNum2);return re;} };//乘法运算类 class mulOperation :public Operation { private:string strNum1;string strNum2;string ope;int re; public:mulOperation(string _strNum1, string _strNum2, string _ope) :strNum1(_strNum1), strNum2(_strNum2), ope(_ope), re(0) {}virtual int getResult() override{if (!isError(strNum1, strNum2, ope))throw opeException();elsere stoi(strNum1) * stoi(strNum2);return re;} };//除法运算类 class divOperation :public Operation { private:string strNum1;string strNum2;string ope;int re; public:divOperation(string _strNum1, string _strNum2, string _ope) :strNum1(_strNum1), strNum2(_strNum2), ope(_ope), re(0) {}virtual int getResult() override{if (!isError(strNum1, strNum2, ope))throw opeException();else if (stoi(strNum2) ! 0)re stoi(strNum1) / stoi(strNum2);elsethrow opeException();return re;} };//运算工厂类 class OpeFactory { public:Operation choose(string _strNum1,string _strNum2,string _ope){if (_ope ){operation new addOperation(_strNum1, _strNum2, _ope);}else if (_ope -)operation new subOperation(_strNum1, _strNum2, _ope);else if (_ope *)operation new mulOperation(_strNum1, _strNum2, _ope);else if (_ope /){operation new divOperation(_strNum1, _strNum2, _ope);}elseoperation nullptr;return *operation;}private:Operation* operation; };//界面逻辑 int main() {try{string _strNum1 ;string _strNum2 ;string _ope ;cout 请输入左操作数 endl;cin _strNum1;cout 请输入右操作数 endl;cin _strNum2;cout 请输入操作符 endl;cin _ope;OpeFactory factory;Operation* re factory.choose(_strNum1, _strNum2, _ope);if (re ! nullptr)cout (*re).getResult() endl;elsecout 您的输入有误 endl;}catch (opeException ex){cout 您的输入有误 endl;}return 0; }在5.0版本的计算器代码中我们将运算类分成了4种类分别是加法类、减法类、乘法类、除法类还创建了一个工厂类专门用于根据不同情况实例化对象每个类只有一个职责我们要修改某个功能只需要去修改对应的类即可极大降低了代码之间的耦合。 单一职责原则的核心就是控制类的粒度大小、将对象解耦、提高其内聚性。如果遵循单一职责原则将有以下优点 降低类的复杂度。一个类只负责一项职责其逻辑肯定要比负责多项职责简单得多。提高类的可读性。复杂性降低自然其可读性会提高。提高系统的可维护性。可读性提高那自然更容易维护了。变更引起的风险降低。变更是必然的如果单一职责原则遵守得好当修改一个功能时可以显著降低对其他功能的影响。
http://www.w-s-a.com/news/348227/

相关文章:

  • 福建高端网站建设个人公众号怎么制作教程
  • 企业网站有哪些举几个例子wordpress ie兼容插件
  • 高端的深圳网站页面设计福清市建设局官方网站
  • 安装网站到服务器合肥建设干部学校网站
  • 影视网站如何做销售案例网站
  • 建设网站对比方案龙岗网站开发公司
  • 网站开发标准网站建设公司兴田德润可信赖
  • 如何建设一个公众号电影网站自动seo优化
  • 个人网站能备案吗酱香拿铁采取了哪些网络营销方式
  • 网站建设及推广好做吗自己做的网站加入购物车价格
  • 涡阳在北京做网站的名人注册一个免费的网站
  • 三门峡建设环境局网站公司注册网上核名通道
  • 叶县建设局网站要看网海外域名是多少
  • 网站运行环境配置Wordpress支付时效
  • logo设计网站知乎港北网站建设
  • 北京市保障性住房建设投资中心官方网站有限责任公司的特点
  • 做网站卖互联网营销怎么做
  • 晋州市建设局网站建站网站系统
  • 专业网站优化方案广东微信网站制作报价表
  • 北京网站建设公司分形科技简述营销网站建设策略
  • 汉中网站建设有限公司vue网站开发
  • 网站备案背景幕布阳江东莞网站建设
  • 北京网站建设要多少钱html网站标签
  • 做兼职做网站的是什么公司网站怎么修改
  • 舆情监控都有哪些内容西安seo网站公司
  • 网站有域名没备案天津网络营销
  • 哈巴狗模式网站开发电子商务平台建设与运营技术
  • 摄影网站源码wordpress内涵段子
  • 实验一 电子商务网站建设与维护图片做网站
  • 网站策划书模板大全中国建设部官方网站资格证查询