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

芜湖 网站建设seo教程 百度网盘

芜湖 网站建设,seo教程 百度网盘,免费制作商标,在微信上怎么做网站2023年8月27日,周日下午 我觉得我的这篇博客还是写得很不错的,哈哈哈。 目录 概述举例说明用开放-封闭原则重构 概述 开放-封闭原则(Open-Closed Principle,OCP)是面向对象设计中的一个重要原则,也是许多…

2023年8月27日,周日下午

我觉得我的这篇博客还是写得很不错的,哈哈哈。


目录

  • 概述
  • 举例说明
  • 用开放-封闭原则重构

概述

开放-封闭原则(Open-Closed Principle,OCP)是面向对象设计中的一个重要原则,也是许多设计模式的基础。它由Bertrand Meyer在他的书《面向对象软件构造》中提出,并被广泛应用于软件开发中。

开放-封闭原则的核心思想是:软件实体(类、模块、函数等)应该对扩展开放,对修改封闭。换句话说,当需要修改一个软件实体时,应该通过扩展它的行为,而不是修改它的源代码。

这个原则的目标是实现软件设计的稳定性和可维护性。通过遵循开放-封闭原则,我们可以减少修改已有代码的需求,从而降低了引入新错误的风险,并提高了代码的可复用性

实现开放-封闭原则的关键是使用抽象和多态。通过定义抽象的接口或基类,可以将代码与特定的实现分离开来。这样,在需要变更行为时,我们只需要创建新的实现类并基于抽象进行扩展,而不需要修改已有的代码。

举例说明

假如有一天,公司要我写一个计算圆的面积的函数getArea

#include <iostream>// 计算圆的面积
double getArea(double radius) {return 3.14159 * radius * radius;
}int main() {// 计算面积double area = getArea(3);// 输出面积std::cout << "area: " << area << std::endl;return 0;
}

这很简单,是不是?

但是后来公司要求这个getArea函数要增加计算正方形的面积的功能,

假设我不懂开放-封闭原则,那么我只能老老实实修改getArea函数内部的代码

#include <iostream>// 计算面积
double getArea(double num,std::string thing) {if(thing=="圆形")return 3.14159 * num * num;if(thing=="正方形")return num*num;
}int main() {// 计算面积double area1 = getArea(3,"圆形");double area2=getArea(4,"正方形");// 输出面积std::cout << "圆形面积: " << area1 << std::endl;std::cout << "正方形面积: " << area2 << std::endl;return 0;
}

虽然我也完成了任务,但可以看到getArea函数变得复杂了:参数由1个变成2个;内部的实现代码也更多了。

但是任务还没结束,后来公司又让我给getArea函数添加计算长方形的功能

#include <iostream>// 计算面积
double getArea(double num1,double num2,std::string thing) {if(thing=="圆形")return 3.14159 * num1 * num1;if(thing=="正方形")return num1*num1;if(thing=="长方形")return num1*num2;
}int main() {// 计算面积double area1 = getArea(3,0,"圆形");double area2=getArea(4,0,"正方形");double area3=getArea(4,3,"长方形");// 输出面积std::cout << "圆形面积: " << area1 << std::endl;std::cout << "正方形面积: " << area2 << std::endl;std::cout << "长方形面积: " << area3 << std::endl;return 0;
}

可以看出来,我的getArea函数不仅变得更加难以理解,而且变得更加复杂了:参数由2个变成3个,而且内部代码实现也变多了。

接下来就不用写,照这么写下去,随着需求的增多,getArea函数只会变得越来越复杂和难以理解。

用开放-封闭原则重构

不难看出,在getArea中不变的是要返回一个面积,不断变化的是不同图形的计算方法,

所以可以封闭getArea的”返回一个面积“,而开放”计算方法“。

我把所有图形抽象成一个Shape抽象类,要求所有Shape抽象类的派生类都必须提供一个返回面积的接口。至于这些派生类怎么实现父类Shape要求的返回面积的接口,就各显神通、因地制宜了,此之谓”开放扩展“

而getArea函数只需雷打不动地调用Shape类的派生类的返回面积的接口就可以了,此之谓”封闭修改“。

#include <iostream>// 抽象基类,用于表示图形形状
class Shape {
public:virtual double area() const = 0;
};// 具体的图形形状:矩形
class Rectangle : public Shape {
public:double width;double height;Rectangle(double w, double h) : width(w), height(h) {}double area() const override {return width * height;}
};// 具体的图形形状:圆形
class Circle : public Shape {
public:double radius;Circle(double r) : radius(r) {}double area() const override {return 3.14159 * radius * radius;}
};// 计算所有图形的总面积
double getArea(const Shape* shape) {return shape->area();
}int main() {// 创建矩形和圆形对象Circle circle(3);Rectangle rect1(4, 4);Rectangle rect2(4, 3);// 计算总面积double area1 = getArea(&circle);double area2=getArea(&rect1);double area3=getArea(&rect2);// 输出面积std::cout << "圆形面积: " << area1 << std::endl;std::cout << "正方形面积: " << area2 << std::endl;std::cout << "长方形面积: " << area3 << std::endl;return 0;
}

可以看到,无论公司要求增加什么图形的计算面积功能,都不需要修改getArea函数,

只需要增加一个继承自Shape类的派生类就可以了,

不信的话,你们可以再添加一个计算梯形的面积试试,就当作一个小作业。

http://www.yidumall.com/news/8113.html

相关文章:

  • 网站建设实训总结封面网站关键词优化排名怎么做
  • ps切片工具做网站深圳网络公司推广平台
  • 统一汤达人选择她做汤面活动网站优化师是一份怎样的工作
  • 互联网网站开发的未来方向优化落实防控措施
  • 一个网站如何挣钱百度搜索优化怎么做
  • 运城做网站sem网络推广公司
  • 定制网站开发冬天里的白玫瑰谷歌广告联盟
  • 网站建设 用户管理湘潭营销型网站建设
  • 衡水专业网站建设公司网络推广seo怎么弄
  • 关于服饰搭配做的比较好的网站关键词排名seo
  • 新媒体运营需要哪些技能青岛seo排名扣费
  • 自己公司的网站怎么编辑石家庄高级seo经理
  • 推广做网站莱芜广州抖音seo公司
  • 公司注册地址备案流程郑州网站seo优化
  • 网站必须做公安部备案seo网络优化公司
  • 凡科微传单app软件下载国内专业seo公司
  • 昌平区事业单位公共知识培训网站百度推广官方
  • web网站开发介绍电商培训机构推荐
  • 如何设定旅游网站seo核心关键词广东深圳疫情最新
  • 企业官网响应式网站廊坊网络推广公司
  • 怎么查询网站是哪家公司做的搜索引擎推广文案
  • 新华区设计网站公司网络优化工程师工作内容
  • 做推广赚钱的网站外贸推广平台哪家好
  • 中文做英文网站抄袭东莞有哪些做推广的网站
  • 网站css样式下载网络营销的核心是
  • 上海做淘宝网站如何做网站营销推广
  • 后期网站网络推广平台公司
  • 龙岗企业网站建设济南网站seo公司
  • 室内设计培训班多少钱南京seo关键词排名
  • 如何建立起个人网站全球疫情最新数据统计