面向对象七大设计原则

开闭原则:面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则。简单地说,就是你的代码写完了,在不修改源代码的情况下还能拓展新需求。这样代码的可维护性就很强了,省的改的亲妈都不认识。

怎么实现呢,在代码层面来说,是使用抽象类,抽象类包含想要的功能,而具体的实现类都是它的子类,比如动物类Animal,它的子类有Dog和Cat,你在有一个功能类或者说操作类与Animal建立依赖关系,用setAnimal方法来具体实现是哪个动物,再调用Animal的eat方法,就实现猫吃鱼狗吃肉的对应实现类方法,那么拓展性在哪呢,你想做羊吃草,就给Animal多一个羊的子类就行了。

还有一种符合开闭原则的,就是咱们的一些参数,都写在配置文件上,这样也是达到不修改代码的情况下修改了参数。

 

单一职责原则:这个原则按照搜索的内容来说,说简单也简单,基本上就是一个类就负责一个作用,相同作用的功能就使用这一个类就行了,说难是难在设计上需要丰富的经验。之所以要一个类负责一个职责或者功能,就是为了方便维护,提高复用性,一个类的功能太多了,好多功能调用这个类,你修改就很麻烦,复用也不是很顺手,所以要求高内聚低耦合。也就是说,你有什么功能需求,就封装成一个类,这个类就这个功能,用就调用这个类就是了,别什么都往里塞。

 

里氏替换原则:看它正经的解释妥妥的会懵逼,简单的说就是,方法的参数是父类,你传子类没问题,能用不报错,参数是子类,你传父类妥妥的给你报错。我的理解就是多态,而且这个原则也是上面开闭原则的基础,方法的参数基本上就是父类,子类实现父类的方法,或者父类里面包含子类的方法,总之就是,只要是子类,就会对应不同的子类得出不同的结果,便于代码的复用和功能的拓展。

依赖倒转原则: 简单说就是你在当前类里需要用某个类的时候,不要直接用这个类,而是用这个类的抽象类,这样拓展性就会很强。在spring中用的最体现的就是依赖注入,也就是web的controller你要调用service不是注入了他的接口了进一步调用实现类了嘛,service到dao层也是这个道理。如果结合开闭原则和里氏替换,那么你可以实现在配置文件来调整你通过这个注入的接口来实现不同的子类达到不同的功能。

 接口分离原则:简单点说,就是别什么方法都塞到一个接口里,这样的接口违反了职责单一原则,同时要实现接口不得实现所有方法吗?它不用的它也得实现,不就暴露了其他本来不该让别人看见的方法,这样不是破坏了封装性了吗,那么该怎么写接口呢?就按照职责单一来写,什么功能写什么接口,不要有多余用不到的方法,但也不要拆的太细,如果导致了接口数量庞大就没必要了。

 

合成复用原则:这个原则的目的通俗的说就是提高代码的复用率,你新写一个对象,但是他有些功能另一个已存在的对象的方法就能实现,那么就拿老对象作为这个新对象的成员变量就行了。其实实现这样的代码复用有两种,一个是老对象作为新对象的成员变量,还有一个当然就是继承了,实现父类的方法,但是吧,这个耦合性不就强了,父类的方法增多减少,或者变化,你这个新对象不得跟着一起变吗?而且java讲究的是单继承不是吗,多不方便。
 
 
迪米特原则:这个原则我就不说了,主要的目的就是实现类与类之间的解耦,毕竟如果两个类的耦合性很强的话,一个类的改变有可能会影响其他的类,因此也要做出想要的修改,这是想到的,那么没想到还没在测试中发现的问题,一上线了就是麻烦事。因此要重视类和类之间的耦合关系,迪米特原则的简单说法就是只和朋友说话,不和陌生人说话,什么是朋友呢?
首先是当前对象本身,
第二是以参数形式传入到当前对象方法中的对象
三是当前对象的成员变量
四是如果这个成员变量是个集合,那么集合中的元素也是朋友
五是当前对象所创建的对象。
其他的就不要产生直接通信。减少和避免与陌生人交互,如果需要交互调用的话,最好做一个中间类进行交互,这样的话,修改类的时候影响的只有中间类。
 
posted @ 2022-08-05 16:28  蓝海的bug本  阅读(52)  评论(0编辑  收藏  举报