开闭原则它是java世界里最基础的设计原则,它指导我们如何建立一个稳定、灵活的系统。开闭原则的定义是:软件中的对象(类、模块、函数等)应该对于扩展是开放的,但是,对于修改是封闭的。在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会将错误引入原本已经经过测试的旧代码中,破坏原有系统。因此,当软件需要变化时,我们应该尽量通过扩展的方式来实现变化,而不是通过修改已有的代码来实现。当然,在现实开发中,只通过继承的方式来升级、维护原有系统只是一个理想化的愿景,因此,在实际的开发中,修改原有代码、扩展代码往往是同时存在的。
软件开发过程中,最不会变化的就是变化本身。产品需要不断升级、维护,没有一个产品从第一个版本开发完就再没有变化了,除非在下一个版本诞生之前他已经过被终止。而产品需要升级,修改原来的代码就可能会引发其他的问题。那么,如何确保原有软件模块的正确性,以及尽量少地影响原有模块,答案就是,尽量遵循本章讲诉的开闭原则。
《面向对象软件构造》一书中提出这一原则------开闭原则。这一想法认为,程序一旦开发完成,程序中一个类的实现只应该因错误而修改,新的或者改变的特性应该通过新建不同的类实现,新建的类可以通过继承的方式来重用原类的代码。显然他的定义提倡实现继承,已存在的实现的类对于修改是封闭的,但是新的实现类可以通过覆盖父类的接口应对变化。
说了这么多,想必大家还是半懂不懂,还是让我们以一个简单示例说明一下。
在对ImageLoader进行了一次重构之后,小明的这个开源库获得了一些用户,小明第一次感受到成功的快乐,对开源的热情也越发高涨起来!通过动手实现一些开源库开深入学习相关技术,不仅能提升自我,也能更好地将这些技术运用到工作中,从而开发出跟稳定、更优秀的应用,这就是小明真实想法。
小明第一轮重构之后的ImageLoader职责单一、结构清晰,不仅获得了主管的一些肯定,还得到了用户的夸奖,算是一个不错的开始。随着用户的夸奖,算是个不错的开始。随着用户的增加,有些问题也会暴露出来了,小明的缓存系统就是大家“吐槽”最多的的地方。通过内存缓存解决了每次网络加载图片的问题,但是,Android应用内存有限制,且具有易失性,即当应用重新启动后,原来已经加载过的图片将会丢失,这种重启之后就需要重新下载!这又会导致加载缓慢、耗费用户流量。小眀考虑引入sd卡缓存,这样下载过的图片就会缓存到本地,及重启应用也不需要重新下载了。小明在和主管讨论了该问题之后就投入了编程中,下面就是小明的代码。、、、、
网友评论