12--delphi的接口
(未完待续..........)
到现在我都认为接口编程比类继承更加的具有弹性和更适用于许多的应用中,很多人都以为多重继承是一个很高超的方法,其实多重继承的功能让整个类越来越臃肿起来,接口编程是一个讲究实际,比较接近面向对象发展潮流的技术,巧妙的接口设计能够控制日渐庞大的框架,最明显的莫过于Spring框架了。当然接口编程概念,在Delphi时代一直就有了,在我用delphi4搞DCOM编程,在分布式的系统中运用很是广泛了,接口机制让代码维护起来很是方便。在面向对象运用方面,接口编程的方式能够让类继承的方式缺陷屏蔽掉,像类对象和类对象之间的交互,两者必须知道对方类型,因此形成了紧耦合的关系,这样造成一方类改变势必会影响另一方从而破坏了原来的工作代码。所以我们需要一种机制来定义通用的沟通方式。
接口就是一群服务方法的集合,在2000年的时候corba技术漫天飞舞,
这是一个典型的proxy的技术也是一个接口机制运用最好的技术了。那时候我基本上还是以微软的COM组件做开发,这样的接口机制当然以COM对象之间合作和沟通的机制。该接口机制基本上由一个唯一的接口,我们快捷键Crtl+shift+G就可以生成guid。这个接口都是从接口的最高层的类IUnknow接口继承下来的,该接口的方法有查询接口功能QueryInterface,以及管理接口的生命周期的addref和release方法,当一个接口加上一个唯一的guid号后便可以作为com接口了。然而COM接口机制由于只提供了接口的声明和接口的继承,实际上并没有实现继承。所以当要实现特定的COM接口时,除了实现接口的方法之外,还须实现此接口所有父代接口声明的服务方法。COM接口机制由于也提供了控制COM对象的声明周期,因此该接口变得复杂起来,所以我们要通过接口来控制COM的生命周期。所以只要拥有COM对象的接口,COM对象便不会被释放掉,我们常用计数器来控制使用的次数,所以每次我们都需要增加接口引用的计数值,因此整个编码过程还是极为繁琐的。当年被吹捧的Corba计数,还有我曾搞过的COM编程如今都退出了接口编程的舞台,那些编写COM的代码都已成了尘封的故事。
Delphi的接口除了支持COM外,在Delphi6支持web service开发是加入了一个接口叫做RTTI。这个RTTI叫作:Run Time type Information.该接口是由delphi6的编译器M+/M-指令支持的,在源码中我们看到只要在接口引用了该编译,该接口便自动有了RTTI信息。其实RTTI信息是有TIntfMetaDData的结构体定义的,该接口保存的信息有接口名称,接口声明的单元,存储接口方法信息动态数组,接口信息指针等,我们使用这接口就可以存取接口信息可用于更为复杂的编码过程中。