重学设计模式之适配器模式

370 阅读2分钟

目录

  • 适配器模式是什么?
  • 适配器模式的使命?
  • 适配器模式的具体实现类适配器和对象适配器

适配器模式是什么?

适配器模式是将一个类的接口转换成客户希望的另外一个接口的设计模式。

适配器模式的使命?

适配器模式的诞生是为了解决需要合作的对象不兼容的问题。通过适配器在两个并不兼容的对象间搭起合作的桥梁,两个不兼容的对象在不直接接触的情况下,通过适配器完成合作。适配器模式主要解决一下问题:

  1. 系统需要使用现有的类,而此类不符合系统需要,即接口不兼容。
  2. 需要建立一个可重复使用的类,用于与一些彼此间没有太大关联的类合作。
  3. 需要统一的输出接口,但是输出短类型不可预知。

适配器模式的具体实现

适配器模式分为两种,类适配器和对象适配器。 在以下场景中可以使用适配器模式:笔记本电源电压是 5V,生活中电线电压是 220。现在需要通过适配器模式使得笔记本能够使用生活电线的电源。

类适配器

类适配器的实现使用了继承机制,适配器同时继承两个对象的接口。

public interface Laptop {

    int getVolt5();
}

public class PowerSupply {

    public int getVolt220() {
        return 220;
    }
}

public class VoltAdapter extends PowerSupply implements Laptop {
    @Override
    public int getVolt5() {
        return getVolt220() / 44;
    }
}

public class VoltAdapterTest {

    @Test
    public void voltTest() {
        VoltAdapter voltAdapter = new VoltAdapter();
        System.out.println("输出电压:" + voltAdapter.getVolt5());
    }
}

输出电压:5

对象适配器

对象适配器的实现时使用了构成原则:适配器实现了其中一个对象的接口,并对另一个对象进行封装。

public interface Laptop {

    int getVolt5();
}

public class PowerSupply {

    public int getVolt220() {
        return 220;
    }
}

public class VoltAdapter extends PowerSupply implements Laptop {

    private PowerSupply mPowerSupply;

    public VoltAdapter(PowerSupply powerSupply) {
        mPowerSupply = powerSupply;
    }

    @Override
    public int getVolt5() {
        return mPowerSupply.getVolt220() / 44;
    }
}

public class VoltAdapterTest {

    @Test
    public void voltTest() {
        VoltAdapter voltAdapter = new VoltAdapter();
        System.out.println("输出电压:" + voltAdapter.getVolt5());
    }
}

输出电压:5