定義:將一個類的接口轉換成客戶希望的另外一個接口。Adapter
模式使得原本由於接口不兼容而不能一起工作的那些類可以一起工作。
使用場景:需要的東西就在眼前,但卻不能使用,而短時間又無法改造它,於是我們就想辦法適配它。
系統的數據和行爲都正確,但接口不符時,我們應該考慮用適配器,目的是使控制範圍之外的一個原有對象與某個接口匹配。適配器模式主要應用於希望利用一些現存的類,但是接口又與利用環境要求不一致的情況,比如在早期代碼利用些功能等應用上很有實際價值
還是來個例子說明問題
虛基類,所有方法的基礎
public abstract class Player
{
protected String name;
public Player(String name)
{
super();
this.name = name;
}
public abstract void attack();
public abstract void defense();
}
定義籃球的前鋒
public class Forwards extends Player
{
public Forwards(String name)
{
super(name);
}
@Override
public void attack()
{
System.out.println("前鋒" + this.name + "進攻");
}
@Override
public void defense()
{
System.out.println("前鋒" + this.name + "防守");
}
}
外籍中鋒,如姚明
public class ForeignCenter
{
private String name;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public void 進攻()
{
System.out.println("外籍中鋒" + this.name + "進攻");
}
public void 防守()
{
System.out.println("外籍中鋒" + this.name + "防守");
}
}
翻譯,此類作用類似於適配器
public class Translator extends Player
{
ForeignCenter fc = new ForeignCenter();
public Translator(String name)
{
super(name);
fc.setName(name);
}
@Override
public void attack()
{
fc.進攻();
}
@Override
public void defense()
{
fc.防守();
}
}
教練開始發號施令
public class AdapterMain
{
public static void main(String[] args)
{
Player b = new Forwards("巴蒂爾");
b.attack();
Player m = new Translator("姚明");
m.attack();
m.defense();
}
}
將相同功能不同接口的類拿來用,這種僅用在源代碼修改難度過大的情況,系統設計之初儘可能少用,也不是不可用,只是需要特別注意,用到的說明就可能存在設計的漏洞,應該及時重構修改