天天看点

Java面向对象设计原则1——开闭原则开闭原则:开闭原则的目标:开闭原则的实现:

在我们学习面向对象编程的时候,总会出现一些问题,好比以前刚刚写好的代码,上线测试可以、正常运行,突然有一天说要加一个功能,改完之后,发现以前正常运行的功能不能用了,类似这样的问题有好多好多,为了避免类似的事件发生,程序员一定要根据这些原则去开发程序。

我们一个一个来学习,今天来学习7大面向对象设计原则之一,开闭原则。

开闭原则:

开闭原则(Open Closed Principle,OCP),它由勃兰特·梅耶(Bertrand Meyer)提出,在1988 年的著作《面向对象软件构造》(Object Oriented Software Construction)中提出

软件实体应当对扩展开放,对修改关闭(Software entities should be open for extension,but closed for modification)。

这就是开闭原则的经典定义。

软件实体指的是:

1.项目或软件产品中按照一定的逻辑规则划分的模块。

2.抽象和类。

3.方法。

好了,先简单理解一下这句话,然后我们开始讲述它!

开闭原则想要表述的,就是我最上面提出的那个问题的设计方法,出现上述的那种问题,一定是没有去使用开闭原则,所以导致没问题的代码,在增加了新的功能之后,正常的代码不能用了。无法进行拓展的代码写出来没有什么意义的。

开闭原则的目标:

这个开闭原则是面向对象设计的一个终极目标,它会能让程序横向扩展、可以延续,灵活的使用。

如果实现了开闭原则,可以让程序再测试的时候,只要测试改动的地方即可;代码复用性高了,可以省下很多事;

开闭原则的实现:

这个我们得举一个栗子来说:

就拿手机iphone XR来说吧,iphone XR 给出了手机尺寸,哪里有音量键、哪里有锁屏键、这都是已经固定好的,只需要手机壳厂商按照这些参数设计手机壳就好了。我们不管怎么更换手机壳,最初的那个眸子是不变的。但是一旦iphone XR的尺寸、还有按键位置固定了,就不允许再去改变了,不然那么多大大小小的厂家不得赔死啊,造了一堆用不了的手机壳。

通过上面的栗子来说实现开闭原则的几个点:

1.抽象约束

将事务的一些特征抽象出来,没有具体的实现,也就表示它可以有非常多的可能性,可以跟随需求的变化而变化。抽象出来之后的东西要保持稳定,不允许说变就变。

2.数据控制模块行为

用来描述环境和数据的数据, 通俗地说就是配置参数, 参数可以从文件中获得, 也可以从数据库中获得。说白了这个就是我们通常使用的配置文件啊啥的,这个行为到了极致的时候,就是spring的精髓了,控制反转。

3.封装变化

封装变化说的就是,将相同的变化封装到一个接口或者抽象类中。不应该出现两个不同的变化出现在同一个接口或者抽象类中。

我们要封装的是有变化的点。我们给这些变化的店创建稳定的接口,封装可能要变化的。

这些可能理解起来比较难,希望大家可以多去思考一下。