引言
??上一節(jié)我們講過迭代器模式,這節(jié)我們說說適配器模式。
示例地址
??Demo地址
類圖
image
定義
?? 適配器模式把一個(gè)類的接口變換成客戶端所期待的另外一種接口,從而使原本接口不匹配而無法在一起工作的兩個(gè)類能夠在一起工作。
使用場景
??1. 系統(tǒng)需要使用現(xiàn)有的類悔捶,而此類的接口不符合系統(tǒng)的需要,即接口不兼容单芜。
??2. 想要建立一個(gè)可以重復(fù)使用的類蜕该,用于與一些彼此之間沒有太大關(guān)聯(lián)的一些類,包括一些可能在將來引進(jìn)的類一起工作洲鸠。
??3. 需要一個(gè)統(tǒng)一的輸出接口蛇损,而輸入端的類型不可預(yù)知。
適配器模式
??我們都知道,去香港旅游需要換上美元。換美元我們?nèi)ツ膿Q呢。銀行蝉衣,沒錯(cuò)銀行不僅能夠兌換美元舒憾,還可以兌換其他的幣種。這里銀行就是我們設(shè)計(jì)模式中的適配器居灯。我們看看怎么實(shí)現(xiàn)祭务。
類適配模式
1. 人民幣
/**
* 人民幣
*
* @author 512573717@qq.com
* @created 2018/7/23 下午3:53.
*/
public class MoneyRMB {
public void getRMB(int money) {
System.out.println("我是" + money + "人民幣!9窒印义锥!");
}
}
2. 美元
/**
* 美元
*
* @author 512573717@qq.com
* @created 2018/7/23 下午3:57.
*/
public interface IMoneyDollar {
double getDollar(int money);
}
3. 類適配器(美元轉(zhuǎn)換人民幣的適配器)
/**
* 美元轉(zhuǎn)換人民幣的適配器
*
* @author 512573717@qq.com
* @created 2018/7/23 下午4:01.
*/
public class MoneyAdapter extends MoneyRMB implements IMoneyDollar {
@Override
public double getDollar(int money) {
System.out.println("人民幣轉(zhuǎn)換美元");
return money / 6.8;
}
}
4. Client
//類適配器
System.out.println("老王去銀行兌換美元");
MoneyAdapter adapter = new MoneyAdapter();
double result=adapter.getDollar(100);
System.out.println("兌換了"+result+"$");
對象適配器
1. 對象適配器(美元轉(zhuǎn)換人民幣的適配器)
/**
* 美元轉(zhuǎn)換人民幣的適配器
*
* @author 512573717@qq.com
* @created 2018/7/23 下午5:07.
*/
public class MoneyAdapter implements IMoneyDollar {
private MoneyRMB mMoneyRMB;
public MoneyAdapter(MoneyRMB moneyRMB) {
mMoneyRMB = moneyRMB;
}
@Override
public double getDollar(int money) {
System.out.println("人民幣轉(zhuǎn)換美元");
return money / 6.8;
}
public void getRMB(int money) {
mMoneyRMB.getRMB(money);
}
}
2. Client
// 對象適配器
System.out.println("老王去銀行兌換美元");
MoneyAdapter adapter = new MoneyAdapter(new MoneyRMB());
double result = adapter.getDollar(100);
System.out.println("兌換了" + result + "$");
接口適配器
1. 先定義接口
/**
* 接口
*
* @author 512573717@qq.com
* @created 2018/7/24 下午2:05.
*/
public interface Port {
// 網(wǎng)絡(luò)端口80
void NET();
// Tomcat容器端口8080
void Tomcat();
// Oracle數(shù)據(jù)庫端口1521
void Oracle();
// 文件傳輸FTP端口21
void FTP();
}
2. 接口適配器
/**
* 接口適配器
*
* @author 512573717@qq.com
* @created 2018/7/24 下午2:06.
*/
public class PortAdapter implements Port {
@Override
public void NET() {
}
@Override
public void Tomcat() {
}
@Override
public void Oracle() {
}
@Override
public void FTP() {
}
}
3.聊天適配器
/**
* 聊天適配器
*
* @author 512573717@qq.com
* @created 2018/7/24 下午2:06.
*/
public class ChatAdapter extends PortAdapter {
@Override
public void NET() {
System.out.println("HTTP ://Hello world!");
}
@Override
public void FTP() {
System.out.println("FTP:// File upload succeddful!");
}
}
4. Client
//接口適配器
Port port = new ChatAdapter();
port.FTP();
port.NET();