接口隔离模式
一、Facade门面模式
在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题、甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来互相紧密关联的接口是一种常见的解决方案。
“间接”即“解耦”:
● 人 ——> 硬件
● 人 ——> 软件 ——> 硬件
● 人 ——> 应用软件 ——> 操作系统 ——> 硬件
● 人 ——> 应用软件 ——> 虚拟机 ——> 操作系统 ——> 硬件
为了系统中的一组接口提供一个一致(稳定)的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用(复用)。如下图,B方案就是使用的Facade的效果。
从客户程序的角度来看,Facade模式简化了整个组件系统的接口,对于组件内部与外部客户程序来说,达到了一种“解耦”的效果——内部子系统的任何变化都不会影响到Facade接口的变化。
松耦合,高内聚 —— Facade模式并非一个集装箱,可以任意放进去任何多个对象。Facade模式中组件的内部应该是“相互耦合关系比较大的一系列组件”,而不是一个简单的功能集合。
二、Proxy代理模式
为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问。
在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦。那就需要Proxy在不失去透明操作对象的同时来管理/控制这些对象,增加一层间接层是软件开发中常见的解决方式。
如下图,Proxy模式的结构示意图:
三、Adapter适配器
在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存的对象所不满足的。这时,可以用Adapter模式将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。结构如下图所示: