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

长沙网站建设去哪好室内装饰网站模板

长沙网站建设去哪好,室内装饰网站模板,魏县网站建设,重庆seo优化推广定义:一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展 问题由来:任何软件都需要面临一个很重要的问题,即它们的需求会随时间的推移而发生变化。因为变化,升级和维护等原因&…
定义:一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展
问题由来:任何软件都需要面临一个很重要的问题,即它们的需求会随时间的推移而发生变化。因为变化,升级和维护等原因,如果需要对软件原有代码进行修改,可能会给旧代码引入错误,也有可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试,所以当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现使我们需要的。
为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键。在Java、C#等编程语言中,可以为系统定义一个相对稳定的抽象层,而将不同的实现行为移至具体的实现层中完成。如果需要修改系统的行为,无须对抽象层进行任何改动,只需要增加新的具体类来实现新的业务功能即可,实现在不修改已有代码的基础上扩展系统的功能,达到开闭原则的要求。
举例: 实现画图表的功能,如饼状图和柱状图等,为了支持多种图表显示方式,原始设计方案如图下图所示:
在ChartDisplay类的display()方法中存在如下代码片段:
......
if (type.equals("pie")) {
PieChart chart = new PieChart();
chart.display();
}
else if (type.equals("bar")) {
BarChart chart = new BarChart();
chart.display();
}
......
在该代码中,如果需要增加一个新的图表类,如折线图LineChart,则需要修改ChartDisplay类的display()方法的源代码,增加新的判断逻辑,违反了开闭原则。
现对该系统进行重构,使之符合开闭原则。
(1) 增加一个抽象图表类AbstractChart,将各种具体图表类作为其子类;
(2) ChartDisplay类针对抽象图表类进行编程,由客户端来决定使用哪种具体图表。
重构后结构如图2所示:
我们引入了抽象图表类AbstractChart,且ChartDisplay针对抽象图表类进行编程,并通过setChart()方法由客户端来设置实例化的具体图表对象,在ChartDisplay的display()方法中调用chart对象的display()方法显示图表。如果需要增加一种新的图表,如折线图LineChart,只需要将LineChart也作为AbstractChart的子类,在客户端向ChartDisplay中注入一个LineChart对象即可,无须修改现有类库的源代码。

为什么使用开闭原则:

第一:开闭原则非常有名,只要是面向对象编程,在开发时都会强调开闭原则
第二:开闭原则是最基础的设计原则
其它的五个设计原则都是开闭原则的具体形态,也就是说其它的五个设计原则是指导设计的工具和方法,而开闭原则才是其精神领袖。依照Java语言的称谓,开闭原则是抽象类,而其它的五个原则是具体的实现类。
第三:开闭原则可以提高复用性
在面向对象的设计中,所有的逻辑都是从原子逻辑组合而来,而不是在一个类中独立实现一套业务逻辑。只有这样的代码才可以复用,逻辑粒度越小,被复用的可能性越大。为什么要复用呢?复用可以减少代码的重复,避免相同的逻辑分散在多个角落,减少维护人员的工作量以及系统变化时产生bug的机会。怎么才能提高复用率呢?设计者需要缩小逻辑粒度,直到一个逻辑不可以分为止。
第四:开闭原则可以提高维护性
一款软件量产后,维护人员的工作不仅仅对数据进行维护,还可能要对程序进行扩展,维护人员最乐意的事是扩展一个类,而不是修改一个类。让维护人员读懂原有代码,再进行修改,是一件非常痛苦的事情,不要让他在原有的代码海洋中游荡后再修改,那是对维护人员的折磨和摧残。
第五:面向对象开发的要求
万物皆对象,我们要把所有的事物抽象成对象,然后针对对象进行操作,但是万物皆发展变化,有变化就要有策略去应对,怎么快速应对呢?这就需要在设计之初考虑到尽可能多变化的因素,然后留下接口,等待“可能”转变为“现实”。

如何使用开闭原则

第一:抽象约束
抽象是对一组事物的通用描述,没有具体的实现,也就表示它可以有非常多的可能性,可以跟随需求的变化而变化。因此,通过接口或抽象类可以约束一组可能变化的行为,并且能够实现对扩展开放,其包含三层含义:
1.通过接口或抽象类约束扩散,对扩展进行边界限定,不允许出现在接口或抽象类中不存在的public方法。
2.参数类型,引用对象尽量使用接口或抽象类,而不是实现类,这主要是实现里氏替换原则的一个要求
3.抽象层尽量保持稳定,一旦确定就不要修改
第二:元数据(metadata)控件模块行为
编程是一个很苦很累的活,那怎么才能减轻压力呢?答案是尽量使用元数据来控制程序的行为,减少重复开发。什么是元数据?用来描述环境和数据的数据,通俗的说就是配置参数,参数可以从文件中获得,也可以从数据库中获得。
第三:制定项目章程
在一个团队中,建立项目章程是非常重要的,因为章程是所有开发人员都必须遵守的约定,对项目来说,约定优于配置。这比通过接口或抽象类进行约束效率更高,而扩展性一点也没有减少
第四:封装变化
对变化封装包含两层含义:
(1)将相同的变化封装到一个接口或抽象类中
(2)将不同的变化封装到不同的接口或抽象类中,不应该有两个不同的变化出现在同一个接口或抽象类中。 封装变化,也就是受保护的变化,找出预计有变化或不稳定的点,我们为这些变化点创建稳定的接口。
  • 抽象层的稳定性:抽象层(接口 / 抽象类)应基于稳定的业务需求设计,避免因频繁变更导致重构成本增加。
  • 扩展方式的优先级:优先使用组合 / 聚合扩展功能,其次才是继承(继承可能破坏封装性)。
// 抽象图形类
abstract class Shape {abstract void draw();
}// 具体图形类(圆形)
class Circle extends Shape {@Overridevoid draw() { System.out.println("绘制圆形"); }
}// 具体图形类(矩形)
class Rectangle extends Shape {@Overridevoid draw() { System.out.println("绘制矩形"); }
}// 渲染器(基于抽象编程)
class Renderer {public void renderShape(Shape shape) {shape.draw(); // 扩展新图形时无需修改此方法}
}// 新增三角形(符合开闭原则)
class Triangle extends Shape {@Overridevoid draw() { System.out.println("绘制三角形"); }
}


文章转载自:

http://4fIneBtG.rzpkt.cn
http://MVZ8RjDi.rzpkt.cn
http://Pw1AIR9T.rzpkt.cn
http://v8texJZV.rzpkt.cn
http://3KfyAWr4.rzpkt.cn
http://CQeE5cFG.rzpkt.cn
http://qVXShy3Z.rzpkt.cn
http://gSxl79bb.rzpkt.cn
http://ot1fZvkO.rzpkt.cn
http://B3AhW05r.rzpkt.cn
http://v7CxA9Pu.rzpkt.cn
http://05b4Jhzy.rzpkt.cn
http://cqUVVveC.rzpkt.cn
http://yfSb8r6O.rzpkt.cn
http://rQaeBwWE.rzpkt.cn
http://oDoCJZ9u.rzpkt.cn
http://DiFVmAgC.rzpkt.cn
http://CPMUHJHR.rzpkt.cn
http://uZ0K60In.rzpkt.cn
http://kGEgbUt4.rzpkt.cn
http://4NyBNVKL.rzpkt.cn
http://WDUcKwVZ.rzpkt.cn
http://J8CLlReO.rzpkt.cn
http://4MkMQBuH.rzpkt.cn
http://L0VRIrQF.rzpkt.cn
http://ScNklKqI.rzpkt.cn
http://edqr3VHN.rzpkt.cn
http://h48JyxUA.rzpkt.cn
http://dmw3xKh6.rzpkt.cn
http://K5oAOcFr.rzpkt.cn
http://www.dtcms.com/wzjs/698574.html

相关文章:

  • 清河做网站哪家好互联网公司职位
  • 江苏建设管理信息网站it外包人才
  • 制作哪个网站好网站每年多少钱
  • 韩国做美食的视频网站龙华区住房和建设局网站官网
  • 做网站需要准备哪些东西织梦怎么更新网站html
  • 做行程的网站推荐百度推广官方网站
  • 桦甸市建设局网站软件开发工资怎么样
  • 关于做面包的网站视频会议
  • 网站加入百度地图idmd设计
  • asp网站抓取wordpress封装app ios
  • 网站是如何做的好淄博网站建设推广优化
  • 青岛广新信建设咨询公司网站山东优质校建设专题网站
  • 查询网网站服装html网站模板下载
  • 怎样建设一个购物网站南昌网站建设索q.479185700
  • .网站建设风险优化近义词
  • 17网站一起做网店怎么下单温州模板建站代理
  • 一个网络空间做两个网站网络公司运营是做什么的
  • 性价比最高网站建设电话网站掉权重是怎么回事
  • 个人网站还用备案吗提供扬中网站建设
  • 请柬网站开发网络营销是什么研究
  • 石家庄网站开发哪家好高港区拖拽式网页制作平台
  • 陕西营销型网站建设大数据做网站流量分析
  • flash as3 网站模板现在建网站多少钱
  • 余姚建设局网站怎么把微信公众号的文章wordpress
  • 3g门户网站官网apmserv 设置网站目录
  • 汾阳网站建设二类医疗器械
  • 如何做电子商城网站周口网站制作公司哪家好
  • 利用微博网站做淘客做策划的人经常浏览的网站
  • 世界重大新闻百度网站优化软件
  • 怎么用模板做网站sem论坛