设计模式之设计原则

69 阅读4分钟

一 ,单一职责原则(要合理封装)

单一职责原则是什么?写代码为什么要把代码写的符合单一职责原则?

一个功能要做到功能是比较纯粹的,不要包含其他的功能,这样会有不必要的耦合,就比如最开始的计算器的实现,所有功能都放在一块了,过度的耦合了,功能改起来也不是很方便,

什么情况下考虑要把功能抽取出来成为一个单一的功能?

1.想一下会不会有其他地方也可能用到这个方法,如果有这种情况就可以进行拆分

2.当在改或者新增一个需求的时候,有些代码的功能要重复的时候,适合抽取出来

二,开闭原则(对内部的修改关闭,对外部的扩展打开)

开闭原则其实这个概念很简单,就是当你做好了一个代码的功能了之后,这个代码要做到客户端的代码做最少的修改,或者不修改(策略模式就是一个比较好的体现)要做到这一点还是很难的,这算是整个设计模式的核心思想

三,依赖倒转原则(多使用接口和抽象类)

1.假如说一个电脑的内存条坏了,或者与主板不兼容了,那应该怎么办?当然是去换一个新的内存条就行了,那为什么不用直接换掉一整个主板呢?,原因是内存条与主板连接靠的是接口!!! 一般所有主机和内存都是约定好了一定的接口,也就是按一定的规范去做内存条 与 主板对应内存条的接口,这样全球基本都统一了,由于接口是一样的所以可以随意更换任意牌子的内存!!!

2.假如说收音机,里面的东西坏了怎么办呢?好像并没有那么好修,因为里面的东西高度耦合,各自都不依赖于接口,直接就是过程化的设计,所以修起来很麻烦

其实这就是依赖倒转原则 简单的说其实就是 我们做一些程序设计 高层的类的一些功能一般都会依赖低层的类的功能,就好比javaweb后端的服务层与数据库的连接的层 服务层其实就是高层,数据库的那一层其实就是底层, 所以可以使用接口的方式让他们来进行联系,达成依赖倒转的原则 高层不依赖于低层,低层依赖于抽象 他们应该要都依赖于抽象!!!

四,里氏替换原则 (能够实现开闭原则的基础)

1.其实这就是使得依赖倒转原则能够成立的一个原因,也是开闭原则的基础,简单地说就是继承或者实现进行的探讨

假如我们设计一个动物类,都有跑,跳等功能,然后可以有小狗或者小猫来继承

最后就是如下

 Animal animal = new Cat();
 animal.run(); //类的使用 没有变化
 animal.jump(); //类的使用

我们只需要改变这个new Cat() 变成 new Dog(); 其他地方都不用改,就可以做到了实现了狗的跑和跳了,可以说类在使用方法的时候基本没有感知,就发生了变化 这就是子类必须能替换掉他的父类型,并且无感知,能继续执行代码,也就是里氏替换原则

五,迪米特法则(强调类之间的松耦合)

1.如果一个类里面要调用另一个类的方法,那就尽量的通过一个接口来调用这个类的方法(通过第三者来调用),

2.主要强调就是各个类应该有各自的独立的封装,要有一定的密封性,例如改用private就用private,不需要让别人知道的东西直接私有

3.类之间耦合度越低,越容易复用;比如一个方法封装好了可以使用接口来进行调用,你可以在其他的类中也可以使用这个接口来调用这个方法

六,合成复用原则(一定程度减少类的增多)

1.如果我们发现一个类与另一个类的关系是必然要同时都存在的 比如说大雁与翅膀,我们就可以使用组合的关系

2.如果我们发现一个类中可以拥有多个另一种类 那我们就可以使用 聚合的关系

组合:一个类new的时候,另一个类就会在他的构造器里已经new出来了(一个类里面有另一个类);强的拥有关系,伴随着整个声明周期

聚合:需要在new之后设置进去;可以用set (就好像你构造了一个hashmap 然后往里面塞类一样,可以拥有部分,也可以什么都不用有; 这就是一种聚合,同样也是一个类里面有另一个类),弱的拥有关系

桥接模式很好的体现了这一点