门面模式、代理模式、适配器模式,这三种模式都很接近,他们的区别是:
1、门面模式:
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,简化了系统的使用;
银行柜台办理业务可以理解为门面模式的一种,客户通过银行柜台办理业务,无需了解银行内部复杂的业务逻辑处理,柜台办理员只是把银行能提供的业务为客户端办理,银行没有提供的服务,柜台办理员也无法办理的。
2、代理模式:
为其他对象提供一种代理以控制对这个对象的访问。客户访问不到被代理对象,可以通过代理对象间接的访问;代理对象可以对上次的访问结果进行缓存,下次有相同的请求时可以直接返回缓存而不用去访问被代理对象;代理对象可以拒绝没有访问权限的用户,使其不能访问被代理对象;因此代理模式比门面模式更高级、信息更丰富;
3、适配器模式:
将一个接口转换成客户希望的另外一个接口,使得原本接口不兼容而不能一起工作的那些类可以一起工作。
因为接口的不同,为了让用户使用到统一的接口,把原先的对象通过适配器让用户统一使用,或者扩充新的功能,大多用在代码维护的后期,或者借用第三方库的情况下。
适配器模式比代理模式更复杂,他不仅仅能让客户端访问到实体对象,更能把一堆接口不兼容的实体对象进行有序管理和组织起来,使得他们能协同工作;