模式定义:
适配器模式就是将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间
模式结构:
模式实现:
public class AdapterMode {
/**
* 羊肉类
*/
interface IMutton {
void haveMutton();
}
class Sheep implements IMutton {
@Override
public void haveMutton() {
System.out.println("i have mutton");
}
}
/**
* 猪肉
*/
interface IPork {
void havePork();
}
class Pig implements IPork {
@Override
public void havePork() {
System.out.println("i have pork");
}
}
/**
* 适配器类,挂羊头,卖猪肉(实现羊肉方法,内部调用猪肉方法)
*/
class PigToSheep implements IMutton {
private IPork iPork;
public PigToSheep(IPork iPork) {
this.iPork = iPork;
}
@Override
public void haveMutton() {
iPork.havePork();
}
}
/**
* 测试类
*/
@Test
public void adapterTest() {
//假羊肉
IPork pork = new Pig();
IMutton mutton = new PigToSheep(pork);
mutton.haveMutton();
//真羊肉
mutton = new Sheep();
mutton.haveMutton();
}
}
模式优点:
1、将目标类和适配者类解耦,通过使用适配器让不兼容的接口变成了兼容,让客户从实现的接口解耦
2、增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性
3、灵活性和扩展性都非常好在不修改原有代码的基础上增加新的适配器类,符合“开闭原则”
模式缺点:
1、略
适用场景:
1、系统需要使用现有的类,而这些类的接口不符合系统的需要
2、想要建立一个可以重复使用的类