Gateway:一个封装外部系统或资源访问的对象。


使用场景:
当要访问外部资源时,通常要获取他们的API,而这些API可能很复杂。因为必须考虑到资源相关的许多特性。那么就可以利用Gateway来把特定的API代码封装到一个简单的类中,使其看起来象常规对象一样。

与Gof Patterns区别:[Martin Fowler]
可能大家都会认为Gateway是外观(Facade)和适配器(Adapter)的变体。其实不然:
1、外观模式对复杂的API的简化,其通常是有服务者提供,而且是通用的。Gateway则是客户方为了其特定应用而撰写的。此外,一个外观通常暗示一个与原始接口不同的接口,但在Gateway中可以只是简单的照搬包装的接口。
2、适配器模式修改某一已经实现的接口,使其与另一个你所用到的接口相匹配。Gateway通常没有一个已经存在的接口,虽然你可能回使用一个适配器来将一个实现映射到一个Gateway的接口上。此时适配器是Gateway类的一部分。
3、调停者模式通常用来将多个对象解耦,使得他们无需互相引用,而只要和调停者发生关联。Gateway中通常只涉及到两个对象,而且被包装的资源不知道Gateway的存在。

附件:Gateway.rar(用VS2005.net修改编写,有兴趣者可以自行画出其UML对象关系图)