适配器设计模式(adapter)
首先问一下大家,知道什么是适配器吧?就你那个和砖头一样的笔记本的电源就是一个适配器,你也可以想象成变压器。适配器模式也是这种意思。
首先!!!还是举个例子!我们就说这个笔记本电源吧,大家知道日本的电压是110V吧,和中国的220V是不一样的,这并不代表我们的电脑带到日本就不能使用了,通过适配器我们依旧可以继续使用,所以说就这样一个例子来说,无非是很切题了!
首先我们要知适配器模式包三个角色:
- Target(目标抽象类):目标抽象类定义客户所需的接口,可以是一个抽象类或接口,也可以是具体类。
- Adapter(适配器类):它可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配。它是适配器模式的核心。
- Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类包好了客户希望的业务方法。
是不是觉得一下子生涩了很多!哈哈哈哈哈哈都是我复制的! 好了好了,让我用白话文来说一下这几个概念。
首先,我们可以用电脑打游戏,打代码,但是前提是得有电源才行,但是就像之前提出的,这个电源往往还不太一样,有110V的,有220V的,这相当于一个变量,但是我们要求不管这个电源怎么变化,传输给电脑的必须是一样的电流才行,首先就像刚才复制的 所说,我们需要一个Target,这里我们的Target就是供电和打代码:
public interface Target {
void power(); //供电
void development(); //写代码
}
那么很明显的可以看到,这是一个接口,需要有人能实现它,那么谁实现它呢?我们接着往下看:
public class Adapter implements Target{
private Adaptee adaptee; //适配器
public Adapter(){}
public Adapter(Adaptee adaptee) {
super();
this.adaptee = adaptee;
}
@Override
public void power() {
adaptee.power();
}
@Override
public void development() {
System.out.println("开始编程");
}
}
这里一下子就很烦,大段大段的代码我也不想看,这里我给大家解释一下:这里出现了adaptee,你可以把这个当成真正的适配器,这里面有客户希望的业务方法,在我们这里就是要求供电平稳,这里我们通过构造函数将适配器接入,然后用接进来的适配器进行供电然后编程:
public interface Adaptee {
void power();
}
这是一个接口,提供一个规范。然后接下来就是两种电压的情况:
public class Adaptee110 implements Adaptee {
@Override
public void power() {
System.out.println("提供110V的电压");
}
}
public class Adaptee220 implements Adaptee {
@Override
public void power() {
System.out.println("提供220V的电压");
}
}
这两种电压都是实现Adaptee并重写供电方法。
然后看看主函数就大彻大悟了:
public class TestCase {
public static void main(String[] args) {
Adaptee a1 = new Adaptee110();
Adaptee a2 = new Adaptee220();
Target target = new Adapter(a1);
target.power();
target.development();
}
}
现在虽然实例化了两个电源,但是明显可以看到,我们用的是a1这个电源,也就是110V的电源:
Target target = new Adapter(a1);
但是很明显,无论怎么更换电源,我依旧可以编程,通过适配器转化成统一的标准,这就是适配器模式,在面试里面也是经常会考的。