美文网首页
23种设计模式之适配器模式

23种设计模式之适配器模式

作者: 阿跳爱学习 | 来源:发表于2018-12-27 19:47 被阅读0次

优点:把不兼容的接口适配成兼容,提高复用性。
缺点:目标只能为接口,使用有一定的局限性。

比如,家庭电源为220V,我手机充电只兼容5V,怎么办?

例子很简单:
电源5V:Power5V
电源220V:Power220V
充电方法:charging(Power220V power)
适配器:PowerAdapter

任务:使用适配器模式让充电方法兼容Power5V 接口

220V电源接口:

/**
 * 这是一个电压220V的接口
 */

public interface Power220V {
    int insert();
}

实现类:

/**
 * 这是220V电源的实现类,返回220V电压
 */

public class Power220Impl implements Power220V {
   
 @Override
    public int insert() {
        return 220;
    }
}

在没适配器的情况下调用:

/**
 * 这是调用者
 */

public class MainActivity extends FragmentActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Power220V power220V = new Power220Impl();
        charging(power220V);

    }

    //充电方法
    public void charging(Power220V power) {
        int i = power.insert();
        if (i == 220) {
            Log.d("TAG", "电压为" + i + "你的手机炸了!");
        }else{
            Log.d("TAG", "电压为" + i + "你的手机正在安全充电!");
        }
    }
}
image.png

220V不合适手机充电,只能再做一个5V的接口:

/**
 *这是一个电压5V的接口
 */

public interface Power5V {
    int insert();
}

实现类:

/**
 * 这是5V电源的实现类,返回5V电压
 */

public class Power5Impl implements Power5V {
    
    @Override
    public int insert() {
        return 5;
    }
}

充电方法charging(Power220V power)只兼容Power220V,怎么让它也兼容Power5V ?写个适配器。

/**
 * 这是一个适配器
 */

public class PowerAdapter implements Power220V {

    private Power5V power5V;

    public PowerAdapter(Power5V power5V) {
        this.power5V = power5V;
    }

    @Override
    public int insert() {
        return power5V.insert();
    }
}

适配器类中把Power5V通过构造方法传进来,通过Power5V的实现方法去实现Power220V中的方法,就行了,其实适配器内容就是一个转换过程。
调用:

/**
 * 这是调用者
 */

public class MainActivity extends FragmentActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

//        Power220V power220V = new Power220Impl();
//        charging(power220V);

        Power5V power5V = new Power5Impl();
        PowerAdapter powerAdapter = new PowerAdapter(power5V);
        charging(powerAdapter);
    }

    //充电方法
    public void charging(Power220V power) {
        int i = power.insert();
        if (i == 220) {
            Log.d("TAG", "电压为" + i + "V你的手机炸了!");
        } else {
            Log.d("TAG", "电压为" + i + "V你的手机正在安全充电!");
        }
    }
}
image.png

这样就能把原本不兼容的接口适配成兼容,而且还不用动先前代码,符合设计模式六大原则中的开闭原则。
已完成测试!有不对的地方欢迎指出,感恩。

相关文章

  • 简说设计模式之适配器模式

    前言:对于设计模式基础概念可以去看[简说设计模式之设计模式概述] 一、什么是适配器模式 适配器模式(Adapter...

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

  • 设计模式详解——适配器模式

    本篇文章介绍一种设计模式——命令模式。本篇文章内容参考《JAVA与模式》之适配器模式,Android设计模式源码解...

  • 设计模式之适配器模式

    设计模式之适配器模式 1. 模式定义 适配器模式又称包装器模式,属于结构型模式,它可以将一个接口转换成客户希望的另...

  • 最常用的设计模式---适配器模式(C++实现)

    适配器模式属于结构型的设计模式,它是结构型设计模式之首(用的最多的结构型设计模式)。 适配器设计模式也并不复杂,适...

  • iOS设计模式(5)策略模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(6)模板模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(7)建造者模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(4)抽象工厂模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(1)简单工厂模式

    设计模式系列文章 《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器模式》《iOS设计模式(4)抽象工厂...

网友评论

      本文标题:23种设计模式之适配器模式

      本文链接:https://www.haomeiwen.com/subject/kyohlqtx.html