引言
上一节我们讲过迭代器模式,这节我们说说适配器模式。
示例地址
类图
image定义
适配器模式把一个类的接口变换成客户端所期待的另外一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。
使用场景
1. 系统需要使用现有的类,而此类的接口不符合系统的需要,即接口不兼容。
2. 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
3. 需要一个统一的输出接口,而输入端的类型不可预知。
适配器模式
我们都知道,去香港旅游需要换上美元。换美元我们去哪换呢。银行,没错银行不仅能够兑换美元,还可以兑换其他的币种。这里银行就是我们设计模式中的适配器。我们看看怎么实现。
类适配模式
1. 人民币
/**
* 人民币
*
* @author 512573717@qq.com
* @created 2018/7/23 下午3:53.
*/
public class MoneyRMB {
public void getRMB(int money) {
System.out.println("我是" + money + "人民币!!!");
}
}
2. 美元
/**
* 美元
*
* @author 512573717@qq.com
* @created 2018/7/23 下午3:57.
*/
public interface IMoneyDollar {
double getDollar(int money);
}
3. 类适配器(美元转换人民币的适配器)
/**
* 美元转换人民币的适配器
*
* @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("人民币转换美元");
return money / 6.8;
}
}
4. Client
//类适配器
System.out.println("老王去银行兑换美元");
MoneyAdapter adapter = new MoneyAdapter();
double result=adapter.getDollar(100);
System.out.println("兑换了"+result+"$");
对象适配器
1. 对象适配器(美元转换人民币的适配器)
/**
* 美元转换人民币的适配器
*
* @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("人民币转换美元");
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 {
// 网络端口80
void NET();
// Tomcat容器端口8080
void Tomcat();
// Oracle数据库端口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();
网友评论