木灵鱼儿

木灵鱼儿

阅读:96

最后更新:2022/05/13/ 2:02:06

设计模式的7个设计原则

设计原则

在软件开发中,为了提供软件系统的:可维护性、可复用性、增加软件的可扩展性和灵活性,程序员尽量根据7条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。

设计原则最初只有5条,单一功能、开闭原则、里氏替换、接口隔离以及依赖反转,后来又进行了增强,目前详细版的有7个原则,很多书都只有6个原则。目前共有23种设计模式。

设计模式最初都是应用于强类型语言,所有很多例子都是java这种例子,所以,类,抽象,这些在后面的文章中会频繁出现。希望你有一些心理准备。

开闭原则

开闭原则是设计中最为重要的一个设计原则,它是所有原则的基础,所有的设计原则全部都是围绕着开闭思想延展的。

正所谓原则的尽头是开闭

开闭原则讲的是:对扩展开放,对修改关闭

举个例子:

当我们有一个已经写好的功能,已经投入使用时,这时又更新了新的需求,此时为了满足需求,原有的功能就需要进行改动,但是如果直接去修改,很容易造成原有功能出现问题(保证已上线的功能不会出问题)。

为了能保证代码的安全性,遵循开闭原则,对功能的直接修改是不提倡的,提倡的是增加新的扩展,比如原来只有a、b两个属性方法,我需要一个新的功能,可以增加一个c的方法。不影响原有的功能。

但是在面向对象的语言里,一般是会预先声明一个抽象,然后由一个去继承抽象,去完成具体功能实现,当需要增加新的功能时,新增一个新的类去实现,不必改动原有的类。

此时,新的类可以很好的完成旧的类的功能,因为抽象定义了规则,且自身的扩展并不会影响旧的类。

面向对象语言里的做法

一般都会将会被改动到的内容,作为一个“热插拔”的功能,比如主题包,所有的主题都可以继承抽象主题,这个抽象定义了一个show的使用接口。

系统需要更换主题时,只需要更换一个继承抽象的类,调用其show方法,就能完成主题切换,而不用每次改动都去修改更上级的代码,才能实现该功能。

那么此时,就可以满足对扩展开发,对修改关闭。

更深一步的思考

我们最开始举的例子,增加一个c方法,难道不是对功能的修改吗?

面向对象语言中,增加一个新的子类,必然要改变调用对象时的代码,这不算修改吗?

其实这种就是针对不同的维度下的看法,功能添加了c方法,这确实是对它的修改,但是新增的c方法并不会影响到功能原有的属性和方法,那么它又可以认为是扩展。

在面向对象语言中,我们可以把整个主题的功能代码作为一个整体来看,当我需要切换主题时,我只需要新增一个新的主题类,然后调用使用,且不会影响之前的主题代码和更上层的代码,那么它在添加新的功能时,完全满足开闭原则。

事实上修改是在所难免的,但是可以接受。

而且,我们要认识到,添加一个新功能,不可能任何模块、类、方法的代码都不 “修改”,这个是做不到的。类需要创建、组装、并且做一些初始化操作,才能构建成可运行的的程序,这部分代码的修改是在所难免的。我们要做的是尽量让修改操作更集中、更少、更上层,尽量让最核心、最复杂的那部分逻辑代码满足开闭原则。

里氏替换原则

版权申明

本文系作者 @木灵鱼儿 原创发布在木灵鱼儿 - 有梦就能远航站点。未经许可,禁止转载。

关于作者

站点职位 博主
获得点赞 1
文章被阅读 96

相关文章