吐槽
自己拉下的东西有点多啊,就设计模式这块的话,经常看大佬的博客讲源码的时候就是说个什么设计模式就过了,自己就一脸懵逼啊,所以还是好好把这块看下,毕竟在前人总结的经验下,减少自己代码傻逼感觉。
参考资料:https://blog.csdn.net/yanbober/article/details/45312127#t2
https://blog.csdn.net/u012817635/article/details/51077944
设计模式是什么
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
说人话就是前人总结的经验和代码设计模板
就好比人类学习耕种一样,古人就在前人的基础经验上不断的改进借鉴才有了现在各种粮食的耕种方法,所以感觉敲代码也一样,就是按照前人无数次的经验,然后再去设计自己的代码,现在看下,自己之前写项目写的代码都是什么鬼,一坨烂泥,没有很好的逻辑性,没有真正掌握面向对象的精髓。
面向对象的三大原则
这个都学java时候学过,简单的复习下
封装
就是把数据和过程包起来,对想访问的数据必须要有相应的方法对应
继承
这个就是类似儿子继承爸爸,儿子又可以添加其他东西,也可以用爸爸的东西
多态
多态性是指允许不同类的对象对同一消息作出响应。多态性包括编译时多态和运行时多态。
主要作用就是用来将接口和实现分离开,改善代码的组织结构,增强代码的可读性。
面向对象类关系
过大量代码和经验可以得知,类与类之间主要有6种关系模式,这六种模板写法导致了平时书写代码的不同耦合度。具体如下所列(耦合度依次增强排列):
- 依赖关系
- 关联关系
- 聚合关系
- 组合关系
- 继承关系
- 实现关系
代码耦合:一个软件结构内不同模块之间互连程度的度量(耦合性也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的信息。)
软件工程规定写代码的原则是“高内聚,低耦合”。内聚是代码块间的独立性,耦合是各个代码块间的联系。
简单的来说联系越紧密就是耦合度越高,然后就很麻烦。
依赖关系
一般而言,依赖关系在Java语言中体现为局域变量、方法的形参,或者对静态方法的调用。
好多就是一个类在自己方法里面调用另一个类的局域变量、方法的形参,或者对静态方法这种。
类似指挥别人,用别人类的方法
关联关系
使一个类知道另一个类的属性和方法。关联可以是双向的,也可以是单向的。在Java语言中,关联关系一般使用成员变量来实现
就是一个类里面有另一个类的实例,然后调用其方法。
聚合关系
和关联一样是通过成员变量来表现的
不过关联是处于同一层次的而聚合则是整体和局部层次
组合关系
组合是关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分对象的生命周期,组合关系是不能共享的。代表整体的对象需要负责保持部分对象和存活,在一些情况下将负责代表部分的对象湮灭掉。代表整体的对象可以将代表部分的对象传递给另一个对象,由后者负责此对象的生命周期。换言之,代表部分的对象在每一个时刻只能与一个对象发生组合关系,由后者排他地负责生命周期。部分和整体的生命周期一样
继承关系
继承表示类与类(或者接口与接口)之间的父子关系。
实现关系
接口定义好操作的集合,由实现类去完成接口的具体操作。
面向对象七大基本原则
单一职责原则(Single Responsibility Principle)
每一个类应该专注于做一件事情。
即:高内聚,低耦合
开闭原则(Open Close Principle)
一个对象对扩展开放,对修改关闭。
即:对类的改动是通过增加代码进行的,而不是修改现有代码
里氏替换原则(Liskov Substitution Principle)
在任何父类出现的地方都可以用它的子类来替代
依赖倒置原则(Dependence Inversion Principle)
要依赖于抽象,不要依赖于具体实现。
接口隔离原则(Interface Segregation Principle)
应当为客户端提供尽可能小的单独的接口,而不是提供大的总的接口。
迪米特原则(Law Of Demeter)
一个对象应当尽量少地与其他对象之间发生相互作用,使得系统功能模块相对独立。
组合/聚合复用原则(Composite/Aggregate Reuse Principle)
尽量使用合成/聚合的方式,而不是使用继承
总结
发现这个真的是头大啊啊,脑壳痛,慢慢的学吧