1,内聚
程序=数据+操作
=数据结构+算法(PASCAL之父Nicklaus Wirth)
=对象+消息
对象是什么?
对象就是保管好自己的东西,做好自己的事情的程序模块--------这就是内聚
2,依赖
一个对象往往需要跟其他对象打交道,既包括获取依赖于另一对象,也包括仰赖其他对象的行为,一旦发生便称为该对象依赖另一对象。只要有一个依赖另一个的现象发生,则这两者之间存在耦合,比如妈妈和婴儿。
3,耦合
耦合的程度就是耦合度,也就是双方依赖的程度,妈妈和婴儿之间是强耦合,而我们与快递小哥之间为弱耦合。
4,依赖倒置
高层模块不应该依赖底层模块,都依赖与抽象。抽象不应该依赖于细节,细节应该依赖抽象。
举一个例子:
假设你要买一个IPhone,卖IPhone的老板让你拿一头猪跟他换,可是你并没有养猪,你只会编程。所以你找到一位养猪户,说给他做一个养猪的APP来换他一头猪,他说换猪可以,但是得用一条金项链来换——所以这里就出现了一连串的对象依赖,从而造成了严重的耦合灾难。解决这个问题的最好的办法就是,买卖双发都依赖于抽象——也就是货币——来进行交换,这样一来耦合度就大为降低了。
5,控制反转
首先我们要区分两个角色,server 跟 Client,也就是服务方和客户方。提供服务端的一方称为服务方,请求服务的一方称为客户方。
当我们使用开发框架时,开发框架就是作为服务方,而我们自己编写的业务应用就是客户方。当Client调用server时,这个叫做一般的控制;而当server调用Client时,就是我们所说的控制反转,同时我们也将这个调用称为“回调”。控制反转跟依赖倒置都是一种编程思想,依赖倒置着眼于调用的形式,而控制反转则着眼于程序流程的控制权。一般来说,程序的控制权属于server,而一旦控制权交到Client,就叫控制反转。比如你去下馆子,你是Client餐馆是server。你点菜,餐馆负责做菜,程序流程的控制权属于server;而如果你去自助餐厅,程序流程的控制权就转到Client了,也就是控制反转。
6,依赖注入
A对象依赖于B对象,等价于A对象内部存在对B对象的“调用”,而前提是A对象内部拿到了B对象的引用。B对象的引用的来源无非有以下几种:A对象内部创建(无论是作为字段还是作为临时变量)、构造器注入、属性注入、方法注入。后面三种方式统称为“依赖注入”。