定义
旧类或者对象接口无法满足现在的需求,继承或者依赖已有的接口实现目标接口,属于结构型模式。
应用场景
需求需要一个新的接口,并且需要使用到旧的接口
优点
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");
}