将1个类的接口转换成客户希望的另外1个接口。Adapter模式使得本来由于接口不兼容而不能1起工作的那些类可以在1起工作。
解决的问题:
即Adapter模式使得本来由于接口不兼容而不能1起工作的那些类可以在1起工作。
类图:
模式中的角色
目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也能够是接口。
需要适配的类(Adaptee):需要适配的类或适配者类。
适配器(Adapter):通过包装1个需要适配的对象,把原接口转换成目标接口。
注:在GoF的设计模式中,对适配器模式讲了两种类型,类适配器模式和对象适配器模式。由于类适配器模式通过量重继承对1个接口与另外一个接口进行匹配,而C#、java等语言都不支持多重继承,因此这里只是介绍对象适配器。
优点:
通过适配器,客户端可以调用同1接口,因此对客户端来讲是透明的。这样做更简单、更直接、更紧凑。复用了现存的类,解决了现存类和复用环境要求不1致的问题。将目标类和适配者类解耦,通过引入1个适配器类重用现有的适配者类,而无需修改原有代码。1个对象适配器可以把多个不同的适配者类适配到同1个目标,也就是说,同1个适配器可以把适配者类和它的子类都适配到目标接口。
缺点:对对象适配器来讲,更换适配器的实现进程比较复杂。
适用处景:系统需要使用现有的类,而这些类的接口不符合系统的接口。想要建立1个可以重用的类,用于与1些彼此之间没有太大关联的1些类,包括1些可能在将来引进的类1起工作。两个类所做的事情相同或相似,但是具有不同接口的时候。旧的系统开发的类已实现了1些功能,但是客户端却只能以另外接口的情势访问,但我们不希望手动更改原有类的时候。使用第3方组件,组件接口定义和自己定义的不同,不希望修改自己的接口,但是要使用第3方组件接口的功能。