接口即对象之间的关系。

接口归根结底不是真实的存在,所以基于接口编程所缔结起来的这个网络实际上就是对象之间的关系。

所以接口可以看成是对象关系的定义。也就是说,当我们在定义接口的时候,其实就是在定义关系。接口就像个注册表,所有的对象都注册在上面。一个对象想用任何服务,按着这张表按图索骥就能够找到它想要的服务。这个就像web service的UDDI,所有的服务都挂在UDDI后面。UDDI就是接口的定义。

提取这个抽象层次的好处是职能有了一个落脚的地方。我们做需求分析按职能区分的对象全部可以放在这张网上。先定义这张网,其实对象的实现就已经呼之欲出了。对象实现的目的其实就是在这张网给用起来。因此实现对“抽象”编程而不是对实现编程。实际上对抽象编程就是对职能编程。

对职能编程的好处是解藕。因为职能关系是用户的关系而不是程序员或类的关系。是系统级的关系。所以依赖倒转,对抽象编程(开闭原则),最小知识原则,接口隔离,里氏代换等面向对象编程基本原则其实都是对职能思想的贯彻。尤其是最小知识原则,意思是你最好什么都不知道。因为你知道的即代表你委托的。而你知道得越多就委托得越多,这个对你没好处。

比如一个类可能丢出一百个错,那么如果不封装它的话,它必将把系统拖入状态爆炸。这是一个有效的武器就是给他委派职能,不给他找借口的机会,断绝对它的“了解”,实现最小知识化原则。控制状态大爆炸。