设计模式java-05.适配器模式

适配器模式(Adapter)就是把一个类的接口转换成客户端所期待的另一种接口。从而使原本两个因为不匹配的类无法在一起工作变成能在一起工作。举个栗子来说,现在的家用电器一般都要求使用220v的电压工作,遇到个别要求使用110v电压的电器时,我们就需要一个变压器,这个变压器就可以理解成为这里的适配器。

那么,哪些场景下我们需要使用适配器模式呢?
1、系统使用类的接口不符合系统要求。
2、要建立一个重复使用的类,用于与该类关联不大的类,包括工作中引进的类。
3、类的适配器模式有点像类的多继承模式,利用接口的特性,把一些零散的类组织在一起,成为一个新的类来实现调用,并且看起来像是对一个类的操作。实际上,适配器模式更强调的是对类的组织,而不是功能的实现。

适配器模式的作用:
适配器模式可以方便的组织代码组织与模型的准确表示,可以把一个类的成员插到另一个类的子类中去,从而让这个继承的子类看起来像一个新类,同时可以对父类减少依赖,下面来看个简单的例子,看看适配器模式是怎么把220V电压转换成110V电压的。

一、类适配器模式
原理:通过继承来实现适配器功能。
1.定义一个输出110V电压的接口

/**
 * 输出110V电压
 *
 */
public interface IV110 {

    void isV110();
}

2.实现110V电压输出

public class V110Impl implements IV110{

    public void isV110(){
        System.out.println("我输出110V电压。");
    }
}

3.定义一个220V电压输出接口

/**
 * 输出220V电压
 * @author Administrator
 *
 */

public interface IV220 {

    void isV220();
}

4.定义一个适配器,用来做变压器功能。

/**
 * 我是变压器,将220V电压变换成110V电压
 *
 */
public class VAdapter extends V110Impl implements IV220{
    public void isV220(){
        isV110();
    }
}

5.测试我们的变压器

public class TestAdapter {
    public static void main(String[]  args){
        VAdapter adapter = new VAdapter();
        adapter.isV220();
    }
}

6.测试结果:

我输出110V电压。

通过变压器转换后,已经将电压从220v转换成了110V。这个就是类适配器模式了。

二、对象适配器模式
原理:通过组合来实现适配器模式
当我们想访问的接口A没有我们想要的方法,在另外一个接口B中却有我们需要的方法,在这种场景下,我们可以通过组合的方式来建立一个适配器。

1.定义一个输出110V电压的接口

/**
 * 输出110V电压
 *
 */
public interface IV110 {

    void isV110();
}

2.定义一个220V电压输出接口

/**
 * 输出220V电压
 * @author Administrator
 *
 */

public interface IV220 {

    void isV220();
}

3.实现110V电压输出

public class V110Impl implements IV110{

    public void isV110(){
        System.out.println("我输出110V电压。");
    }
}

4.定义适配器

public class VAdapter implements IV220{

    private IV110 v110;

    public VAdapter(IV110 v110){
        this.v110 = v110;
    }
    public void isV220(){
        v110.isV110();
    }
}

5.定义测试类

public class TestAdapter {
    public static void main(String[]  args){
        VAdapter adapter = new VAdapter(new V110Impl());
        adapter.isV220();
    }
}

6.测试结果

我输出110V电压。

这里适配器通过将110V电压输出对象IV110组合进来实现适配器模式。

三、接口适配器模式
原理:通过抽象类来实现适配 ,这种适配稍别于上面两种模式。
当存在这样一个接口 ,里面定义了n个方法,但我们只想使用里面的一个或者部分方法的时候,如果我们实现接口,我们需要实现该接口的所有方法。哪怕我们对不使用的方法置空,也会有一大堆大括号,使得该实现类臃肿而不优雅。这个时候我们可以使用一个抽象类作为中间件,充当适配器的角色,用这个抽象类去实现接口,而在抽象类中的所有方法都置空,再创建抽象类的继承类,而我们重写我们需要使用的几个方法即可。
下面来演示一个简单的例子就比较明白了:

public interface A{
    void a();
    void b();
    void c();
    void d();
    void e();
    void f();
}

定义我们的适配器:

public class Adapter implements A{
    public void a(){}
    public void b(){}
    public void c(){}
    public void d(){}
    public void e(){}
    public void f(){}

}

覆盖适配器的方法:

pulic class Client extends Adapter{
    public void a(){
        System.out.println("this is a method.");
    }
    public void b(){
        System.out.println("this is b method.");
    }
}

测试我们的类:

public Class TestAdapter{

    public static void main(String[] args){
        A adapter = new Client();
        adapter.a();
        adapter.b();
    }
}

参考链接:
https://www.cnblogs.com/V1haoge/p/6479118.html
https://www.cnblogs.com/gaobig/p/4844305.html

猜你喜欢

转载自blog.csdn.net/sukiyou_xixi/article/details/79646256