適配器模式(Adapter)付魔,講一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口愤兵。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作铁蹈。
當(dāng)系統(tǒng)數(shù)據(jù)和行為都正確,但是接口不符時(shí)拉队,我們應(yīng)該考慮用適配器弊知,目的是使控制范圍外的一個(gè)原有對(duì)象與某個(gè)接口匹配。適配器模式主要應(yīng)用于希望復(fù)用一些現(xiàn)存的類粱快,但是接口又與復(fù)用環(huán)境要求不一致的情況秩彤。
PS:即對(duì)外部接口進(jìn)行更進(jìn)一層的封裝
主方法
public class main {
public static void main(String[] args) {
Player b = new Forwards("巴蒂爾");
b.Attack();
Player m = new Guards("麥迪");
m.Attack();
Player ym = new Translator("姚明");
ym.Attack();
ym.Defense();
}
}
抽象類
/**
* 球員抽象類
*/
public abstract class Player {
protected String name;
public Player(String name) {
this.name = name;
}
public abstract void Attack();
public abstract void Defense();
}
實(shí)現(xiàn)類
public class Forwards extends Player {
public Forwards(String name) {
super(name);
}
public void Attack() {
System.out.println(String.format("前鋒{%s}進(jìn)攻", name));
}
public void Defense() {
System.out.println(String.format("前鋒{%s}防守", name));
}
}
public class Guards extends Player {
public Guards(String name) {
super(name);
}
public void Attack() {
System.out.println(String.format("后衛(wèi){%s}進(jìn)攻", name));
}
public void Defense() {
System.out.println(String.format("后衛(wèi){%s}防守", name));
}
}
外部接口
public class ForeignCenter {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void Attack() {
System.out.println(String.format("外籍中鋒{%s}進(jìn)攻", name));
}
public void Defense() {
System.out.println(String.format("外籍中鋒{%s}防守", name));
}
}
外部接口適配器類
/**
* 類內(nèi)部聲明并且實(shí)例化一個(gè)內(nèi)部“外籍中鋒”對(duì)象,任何對(duì)Translator類Attack和Defense的調(diào)用其實(shí)就是對(duì)內(nèi)部類的對(duì)應(yīng)方法的調(diào)用
*/
public class Translator extends Player {
private ForeignCenter foreignCenter = new ForeignCenter();
public Translator(String name) {
super(name);
foreignCenter.setName(name);
}
public void Attack() {
foreignCenter.Attack();
}
public void Defense() {
foreignCenter.Defense();
}
}