我们生活中很熟悉的转换插头,因为全球有几种不同的插座接口标准,国内使用的插头不一定适用于国外一些国家的插座,这时候,就需要用到转换插头了。我手中的这个就是德标转国标的。
你看,这不就类似我们设计模式中的适配器模式嘛?
将一个类的接口转换成客户希望的另外一个接口,使得原来由于接口不兼容而不能一起工作的那些类可以一起工作。
文字描述不容易理解没关系,通过下图,应该会有一个更直观的认识。
需求总是会不断地变化,现在我们需要从旧厂商类切换到新厂商类,由于现有的系统与新厂商类彼此不兼容,修改某一个类以兼容另外一个类,都不是件轻松的事。这时候,就需要适配器模式来“救场”了。你看,只需要增加一个适配器的代码,就可以了,很轻松。
有了直观的认识之后,我们就来好好地认识一下适配器模式。
- Target目标角色:该角色定义把其他类转换为何种接口,也就是我们的期望接口。
- Adaptee源角色:你想把谁转换成目标角色,这个“谁”就是源角色,它是已经存在的,运行良好的类或对象,经过适配器角色的包装,它会成为一个崭新的角色。
- Adapter适配器角色:适配器模式的核心角色,其他两个角色都是已经存在的角色,而适配器角色是需要新建立的,它的职责非常简单:就是把源角色转换为目标角色。
适配器模式有两种实现方式:类适配器和对象适配器。其中,类适配器使用继承关系来实现,对象适配器使用组合关系来实现。
类适配器
类适配器的重点在于类,是通过构造一个继承Adaptee类来实现适配器的功能。
Adaptee:小明进入NBA了,但是他只会用中文沟通,
// 已存在的,但是不符合我们既有的标准接口的类
public class XiaoMing {
private int Num;
private String name;
// 只会用中文沟通
public void Chinese() {
System.out.println("用中文沟通");
}
}
Target:但是球队教练是法国人,只会法语和英语,不用用中文。