使用场景:接口不相同时,首先不应该考虑用适配器,而是应该考虑通过重构统一接口。在双方都不太容易修改的时候再使用适配器模式适配,而不是一有不同时就使用它。
1. 外籍球员抽象类、实现类
package com.hj.designPattern.adapter;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public abstract class Player {
private String name;
Player(){}
public abstract void attack();
public abstract void defend();
}
package com.hj.designPattern.adapter;
public class ForwardPlayer extends Player{
public ForwardPlayer(String name) {
super(name);
}
@Override
public void attack() {
System.out.println("外籍前锋进攻" + super.getName());
}
@Override
public void defend() {
System.out.println("外籍前锋防守" + super.getName());
}
}
package com.hj.designPattern.adapter;
public class CenterPlayer extends Player{
public CenterPlayer(String name) {
super(name);
}
@Override
public void attack() {
System.out.println("外籍中锋进攻" + super.getName());
}
@Override
public void defend() {
System.out.println("外籍中锋防守" + super.getName());
}
}
package com.hj.designPattern.adapter;
public class GuardsPlayer extends Player{
public GuardsPlayer(String name) {
super(name);
}
@Override
public void attack() {
System.out.println("外籍后卫进攻" +super.getName());
}
@Override
public void defend() {
System.out.println("外籍后卫防守" +super.getName());
}
}
2. 中国球员抽象类、中国球员实现类
package com.hj.designPattern.adapter;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public abstract class ZhPlayer {
private String name;
ZhPlayer(){}
public abstract void 进攻();
public abstract void 防守();
}
package com.hj.designPattern.adapter;
public class ZhCenter extends ZhPlayer{
ZhCenter(){
super();
}
public ZhCenter(String name) {
super(name);
}
@Override
public void 进攻() {
System.out.println("中国中锋球员进攻" + super.getName());
}
@Override
public void 防守() {
System.out.println("中国中锋球员防守" + super.getName());
}
}
3. 适配器类
package com.hj.designPattern.adapter;
import lombok.Data;
@Data
public class Translator extends Player{
private ZhPlayer zhPlayer;
Translator(String name){
super(name);
}
@Override
public void attack() {
zhPlayer.进攻();
}
@Override
public void defend() {
zhPlayer.防守();
}
}
4. 测试类
package com.hj.designPattern.adapter;
public class AdapterTest {
public static void main(String[] args) {
ForwardPlayer forwardPlayer = new ForwardPlayer("巴蒂尔");
forwardPlayer.attack();
CenterPlayer centerPlayer = new CenterPlayer("麦克格雷迪");
centerPlayer.defend();
Translator translator = new Translator("姚明");
ZhCenter zhCenter = new ZhCenter();
zhCenter.setName(translator.getName());
translator.setZhPlayer(zhCenter);
translator.attack();
}
}
参考:(13条消息) 大话设计模式——适配器模式_不见长安见晨雾的博客-CSDN博客https://blog.csdn.net/fengsheng5210/article/details/124098597