java23种设计模式——六、适配器模式
目录
java23种设计模式—— 一、设计模式介绍
java23种设计模式—— 二、单例模式
java23种设计模式——三、工厂模式
java23种设计模式——四、原型模式
java23种设计模式——五、建造者模式
java23种设计模式——六、适配器模式
java23种设计模式——七、桥接模式
java23种设计模式——八、组合模式
介绍
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,现在我们很多手机没有了耳机的插孔,只留下了type-c的插口,如果我们想使用有线耳机的话就要买一个耳机转type-c的转换器
应用场景
系统需要使用现有的类,而此类的接口不符合系统的需要。
想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。
通过接口转换,将一个类插入另一个类系中。
优缺点
- 优点
1、可以让任何两个没有关联的类一起运行。
2、提高了类的复用。
3、增加了类的透明度。
4、灵活性好。
- 缺点
1、过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。
2.由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。
模式实现
适配器模式有如下三个个角色:
- 源(Adaptee):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以
是具体类,相当于typec线。 - 适配器(Adapter):连接目标和源的中间对象,可以调用另一个接口,作为一个转换器。相当于耳机转typec转换器。
- 目标(Target):即被适配的角色,相当于手机。
首先我们有一个手机类,有一个typec接口默认可以充电
/**
* @author codermy
* @createTime 2020/7/25
*/
public class Phone {
public String throwTypec(){
System.out.println("使用了typec接口");
return "充电";
}
}
有一个耳机可以放音乐
/**
* @author codermy
* @createTime 2020/7/25
*/
public interface Headset {
String music();
}
现在买了一个转换器可以让有线耳机链接手机
/**
* @author codermy
* @createTime 2020/7/25
* 转换器
*/
public class Converter implements Headset {
private Phone phone;
public Converter(Phone phone){
this.phone = phone;
}
@Override
public String music() {
String s = phone.throwTypec();
System.out.println(String.format("%s -------------- > %s",s,"听歌"));
return "听歌";
}
}
用户使用转接器
/**
* @author codermy
* @createTime 2020/7/25
*/
public class Client {
public static void main(String[] args) {
Phone phone = new Phone();
Headset headset = new Converter(phone);
headset.music();
}
}
输出
使用了typec接口
充电 -------------- > 听歌