插件式框架作为一个高聚合低耦合的系统,它的功能定义与功能实现之间是分离的,这种策略是高聚合实现的保证。插件式框架好像一个功能聚集站,它对外界宣布,只要符合它发布的某种规范的组件(实现接口的类通常称为组件)都可以加入到这个平台中,而这些组件到底是做什么事情的,框架并不关心,当然,框架也提供了一些必要的信息和帮助保证这些组件能够正常实现它们的功能。
桥接模式是一种被认可的表示定义和与之关联的实现的方式,它和工厂(Factory)模式为所有的应用提供了基础。使用桥接模式开发的组件具有为了一个共同目标而多方协同工作除某些必须实现的接口外无需彼此交互的优点。
在具有多个逻辑层的程序设计中,各层之间的通讯大多通过接口实现,由于接口不会轻易改变,如果一个层的代码发生变化,它不会影响其它层的功能;只要实现接口的组件功能正确,那么这个程序运行就更无问题。这种做法使得各层之间的影响降低到最低程度。
接口是是类型一般行为的定义和契约。例如交通工具都包含启动、停车、加速和减速等方法,但作为交通工具的具体类型,不同车辆之间的操作是不一样的。接口并不考虑它们各自采用什么方式实现这些功能,但是,它们都必须有这些基本的功能。接口只负责定义而不考虑实现,我们也不能产生一个接口的实例对象(Instance)。
实现了接口的类或结构都必须实现接口中定义的每一个方法,这些方法在设计上往往是相关的。
接口与抽象类非常相似,例如两者都不能产生实例对象,都可以作为一种契约和定义使用。但接口和抽象类仍有本质的不同,这些不同包括:
- 抽象类可以包含某些实现代码,但接口没有任何实现部分;
- 抽象类可以包含字段而接口没有;
- 接口可以被结构(Struct)继承,但抽象类不行;
- 抽象类可以有构造函数和析构函数,而接口都没有;
- 抽象类可以继承自其它类和接口而接口仅仅能继承自接口;
- 接口支持多继承而抽象类仅仅支持单根继承。
下面是抽象类和接口的对比例子:
#001 public abstract class AClass {
#002 abstract public void MethodA (int a);
#003 abstract public void MethodB (int a);
#004 abstract public void MethodC (int a);
#005 abstract public void MethodD (int a);
#006 }
#001 public interface IInterface {
#002 void MethodA (int a);
#003 void MethodB (int a);
#004 void MethodC (int a);
#005 void MethodD (int a);
#006 }
即使不从桥接模式的观点考虑,多种面向对象语言都引入了接口这种类型定义还有一个重要原因:一个类可以实现多个接口。在大部分面向对象语言中,多重继承都是被禁止的,这是因为当编译器需要找到虚方法的正确实现时,会出现不确定性。但是接口并没有实现的部分,实现多个接口,并非意味着类(Class)那样的继承,它也绝非是多重继承机制的替代品。
我们常常将接口与抽象类混淆,事实上,两者的表象过于一致。但接口用来定义两个对象通信的契约,抽象类用来封装对象间公用的行为;抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。二者设计起初的目标完全不同,但在实际应用中被太多的人误解。这个原理在ArcObjects库中显露无遗:不同类型的组件互相调用是通过接口,而同一类型的对象群,如Color,则是通过抽象类组织在一起的,即接口是对外通讯的,抽象类是对内组织的。
原文链接:
http://blog.csdn.net/chiangbt/archive/2008/01/15/2046015.aspx