设计模式—适配器模式

适配器模式

将一个类的接口变换成客户端所期待的另一种接口, 从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

适配器模式是一种结构模式。分为对象适配器模式类适配器模式

优点

  • 适配器模式可以让两个没有任何关系的类在一起运行, 只要适配器这个角色能够搞定他们就成 。
  • 增加了类的透明性 。
  • 提高了类的复用度 。
  • 灵活性非常好 。

使用场景

适配器应用的场景只要记住一点就足够了: 你有动机修改一个已经投产中的接口时, 适配器模式可能是最适合你的模式。

注意事项

适配器模式最好在详细设计阶段不要考虑它, 它不是为了解决还处在开发阶段的问题,而是解决正在服役的项目问题, 没有一个系统分析师会在做详细设计的时候考虑使用适配器模式, 这个模式使用的主要场景是扩展应用中, 就像我们上面的那个例子一样, 系统扩展了, 不符合原有设计的时候才考虑通过适配器模式减少代码修改带来的风险 。

案例分析

  • Target(对象)
/**
 * 电压5V接口
 */
public interface IVoltage5V {
    int output5V();
}
  • Adaptee(被适配者)
/**
 * 电压220V
 */
public class Voltage220V {
    public int output220V() {
        System.out.println("输出220V电压");
        return 220;
    }
}
  • Adapter(适配器)

对象适配器模式

/**
 * 对象适配器
 */
public class ObjectVoltageAdapter implements IVoltage5V {
    private Voltage220V voltage220V;

    public ObjectVoltageAdapter(Voltage220V voltage220V) {
        this.voltage220V = voltage220V;
    }

    @Override
    public int output5V() {
        if (voltage220V == null) {
            return 0;
        }
        int voltage = voltage220V.output220V() / 44;
        System.out.println("输出5V电压");
        return voltage;
    }
}

类适配器模式

/**
 * 类适配器
 */
public class ClassVoltageAdapter extends Voltage220V implements IVoltage5V {
    public ClassVoltageAdapter() {
        super();
    }

    @Override
    public int output5V() {
        int voltage = super.output220V() / 44;
        System.out.println("输出5V电压");
        return voltage;
    }
}
  • Client(请求者)
public class Client {
    public static void main(String[] args) {
        // 对象适配
        ObjectVoltageAdapter voltageAdapter = new ObjectVoltageAdapter(new Voltage220V());
        voltageAdapter.output5V();

        //类适配
        ClassVoltageAdapter classVoltageAdapter = new ClassVoltageAdapter();
        classVoltageAdapter.output5V();
    }
}
posted @   弘一  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示