适配器模式
1.定义:
将一个类的接口转换成客户希望的另外一个接口;Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
2.适配器解决的问题
简单来说就是需要的东西就在面前,但却不能使用,短时间内也无法改造它,于是我们就想办法适配他
适配器模式UML
image-20210507145337237.png
简单的代码实现:
代码结构图
image.png
1.新建一个抽象类Player并提供attack和defence方法
package org.example.adapter;
/**
* @author
* @date 2021/3/24 11:15
**/
public abstract class Player {
private String name;
abstract void attack();
abstract void defense();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2.新建一个Center类并继承Player类实现attack和defence方法
package org.example.adapter;
/**
* @author
* @date 2021/3/24 11:17
**/
public class Center extends Player {
@Override
void attack() {
System.out.println("center attack");
}
@Override
void defense() {
System.out.println("center defense");
}
}
3.新建一个ForeignCenter类提供进攻和防守方法
package org.example.adapter;
/**
* @author
* @date 2021/3/24 11:19
**/
public class ForeignCenter {
void 进攻() {
System.out.println("中锋进攻");
}
void 防守() {
System.out.println("中锋防守");
}
}
4.新建一个适配器类translator类继承抽象类并实现attack和defence方法,但是在该类中的attack方法调用的是ForeignCenter中的进攻方法,defence方法调用的是Foreign中的防守方法;相当于translator类是一个适配器类,将教练讲的英文翻译成中文,使ForeignCenter能够更好的理解,达到使用ForeignCenter的作用
package org.example.adapter;
/**
* @author
* @date 2021/3/24 11:19
**/
public class Translator extends Player {
ForeignCenter foreignCenter = new ForeignCenter();
@Override
void attack() {
foreignCenter.进攻();
}
@Override
void defense() {
foreignCenter.防守();
}
}
客户端调用:
package org.example.adapter;
/**
* @author
* @date 2021/3/24 11:23
**/
public class Client {
public static void main(String[] args) {
Center center = new Center();
center.defense();
Translator translator = new Translator();
translator.attack();
translator.defense();
}
}
运行结果:
image.png