安卓系列之设计模式:适配器模式

156 阅读1分钟

定义

旧类或者对象接口无法满足现在的需求,继承或者依赖已有的接口实现目标接口,属于结构型模式。

应用场景

需求需要一个新的接口,并且需要使用到旧的接口

优点

1.单一职责规则
2.可以将不同的类结合使用
3.新增需求的时候,旧类可以一起被使用到

缺点

1.过多使用会使接口非常混乱
2.不易解读接口内容

具体代码实现

例子说明:原来的电视只能播放数字电视,随着时代发展,电视可以播放网络电视,那边在不动原来的功能的情况下,新增播放网络电视的功能。

旧接口

package com.elaine.testpattern.adapter;

/**
 * 普通电视
 * author: elaine
 * date: 2021/4/25
 */
public interface Television {
    /**
     * 数字电视
     *
     * @param signalType 电视信号类型
     */
    void showDigital(String signalType);
}

新接口

package com.elaine.testpattern.adapter;

/**
 * 新款电视
 * author: elaine
 * date: 2021/4/25
 */
public interface AdvancedTelevision {
    /**
     * 网络电视
     *
     * @param signalType 电视信号类型
     */
    void showOnline(String signalType);
}

新接口实现类

package com.elaine.testpattern.adapter;

import android.util.Log;

/**
 * 网络电视
 * author: elaine
 * date: 2021/4/25
 */
public class OnlineTelevision implements AdvancedTelevision {
    @Override
    public void showOnline(String signalType) {
        Log.e("show====""网络节目");
    }
}

适配器

package com.elaine.testpattern.adapter;

/**
 * 电视适配器
 * 拓展了接收网络信号,然后播放网络电视
 * author: elaine
 * date: 2021/4/25
 */
public class TelevisionAdapter implements Television {
    private AdvancedTelevision advancedTelevision;

    public TelevisionAdapter(String signalType) {
        if (signalType.equalsIgnoreCase("online")) {
            advancedTelevision = new OnlineTelevision();
        }
    }

    @Override
    public void showDigital(String signalType) {
        if (signalType.equalsIgnoreCase("online")) {
            advancedTelevision.showOnline(signalType);
        }
    }
}

运行代码

private void use() {
    HWTelevision hwTelevision = new HWTelevision();
    hwTelevision.showDigital("digital");
    hwTelevision.showDigital("online");
    hwTelevision.showDigital("aaaa");
}

运行结果

图片

若帅哥美女对该系列文章感兴趣,可微信搜索公众号(木子闲集)关注更多更新文章哦,谢谢~