【Java设计模式】适配器模式

组成部分

类适配器

目标对象

源对象

适配器

测试

接口适配器

顶层接口

适配器抽象类


   

        适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。它结合了两个独立接口的功能。这里可以将适配器理解成插头。

        优点是:提高了类的灵活性复用性。缺点就是可能会使系统变得杂乱,不易整体进行把握。

        适用场景:已经存在的类,但需求和方法不匹配。

组成部分

Target目标角色:转接前的角色,需要注意的是目标角色是接口

Adaptee源角色:转接后的角色

Adapter适配器:转接的实现

类适配器

        Target为二孔插座的目标,而源对象Adaptee是三孔插座,于是需要用一个适配器来将Adaptee转为Target(也就是三孔变成两孔)。

目标对象

public interface Target {
    String ErKong();
}

源对象

public class Adaptee {
    public String SanKong() {
        return "三孔插座";
    }
}

适配器

public class Adapter extends Adaptee implements Target {
    public String ErKong() {
        // 获取源对象的数据
        String s = super.SanKong();
        return s + "转换成二孔插座";
    }
}

测试

public class Main {
    public static void main(String[] args) {
        // 为了获取目标对象 于是需要使用到适配器转换
        Target t = new Adapter();
        System.out.println(t.ErKong());
        // 获取到二孔插座 就可以准备自己需要的东西 比如二孔插头
        System.out.println("二孔插头准备完毕");
    }
}

接口适配器

        从以下代码可以看到:如果当每个类都要实现Boss接口的话就需要重写六个方法,但是每次都要重写六个方法而不完全使用这六个方法,那么就会显得很多余。所以说适配器设计模式就这样出来了,可以创建一个类是实现Boss接口,并且可以让一些不常用的方法用final修饰,这样就无需重写这些方法,只需要实现那些常用的方法即可。在Java Web中的GenericServlet类使用了这个设计模式。

顶层接口

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

适配器抽象类

public abstart class Adapter implements Boss {
    public final void a() {
        System.out.println("继承我不用重写a()方法");
    }

    public abstart void b();

    public abstart void c();

    public abstart void d();
  
    public final void e() {
        System.out.println("继承我不用重写e()方法");
    }

    public final void f() {
        System.out.println("继承我不用重写f()方法");
    }
}

你可能感兴趣的:(设计模式,java,设计模式,适配器模式)