接口模式

在系统的设计时刻常常遇到这样一个问题：类Client的实例instanceClient希望使用另一个对象instanceX提供的服务service，但在设计时刻并不能确定对象instanceX究竟属于哪个类。常见的解决办法是：将对象instanceX提供的服务service抽象为一个接口ServiceProvider，然后让对象instanceClient通过持有接口ServiceProvider的实例来使用服务service。这种通过接口间接获得服务的解决方案就是接口模式。

接口模式还可以有一些变化的形式：不止用一个接口抽象一个对象提供的服务，还可以用一组接口抽象一群对象的交互。

效果
接口模式有如下效果：
类Client不直接依赖于任何实在（concrete）的服务提供者，而仅仅依赖于轻量的接口，这样就降低了系统的耦合程度。
因为接口将服务独立出来，服务的提供者就可以变化。
因为引入了接口来间接提供服务，所以设计方案变得更加复杂。

评论

接口模式直接体现了面向对象设计的原则之一：“针对接口编程，而不是针对实现编程”。

许多其他的模式都应用了接口模式，只不过更为特殊。下表列出了作为接口模式特例的其他模式，并且指明了这些模式将哪些服务抽象为接口。

软件设计模式