定义:两个不兼容的接口之间的桥梁,这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
角色:
1.Target:定义Client使用的与特定领域相关的接口;
2.Adaptee:现在需要适配的已经存在的接口;
3.Adapter:对Adaptee 的接口与Target接口进行适配
优点:适配器模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。
使用:以下案例实现:旧系统中提供一个查询服务方法Query();但是我新系统定义底层的数据访问服务层的时候,却是使用的GetList()方法,通过适配器完成在新系统GetList()时调用并返回旧系统的Query();。
1.旧系统的查询服务:
public class Query :IQuery { public object Query() { return new object(); } }
2.新系统的的查询服务接口:
public interface ISelect { object GetList(); }
3.通过类适配器完成转配操作:
public class QueryAdapter : Query, ISelect { public object GetList() { return base.Query(); } }
4.通过对象适配器完成转配操作:
public class QueryAdapter : ISelect { private Query query = new Query(); public object GetList() { return query.Query(); } }
对象适配器:不是通过继承的方式,而是通过对象组合的方式来进行处理的,我们只要学过OO的设计原则的都知道,组合相比继承是推荐的方式。
类适配器:通过继承的方式来实现,将旧系统的方法进行封装。对象适配器在进行适配器之间的转换过程中,无疑类适配器也能完成,但是依赖性会加大,并且随着适配要求的灵活性,可能通过继承膨胀的难以控制。 一般来说类适配器的灵活性较差,对象适配器较灵活,是我们推荐的方式,可以通过依赖注入的方式,或者是配置的方式来做。类适配器需要继承自要适配的旧系统的类,无疑这不是一个好的办法。