1,为什么要使用适配器设计模式
在我们设计中常常会出现一个类所使用的接口与另一个类所提供的接口不一样的情况,那么这个时候就要用适配器设计模式来解决问题
如图,Client想要使用Adaptee的SpecificRequest()但是它只能接收Target类的Request(),那么这种情况下就要使用适配器Adapter,使Adaptee的SpecificRequest()可以伪装成
Target类的Request()被client被调用.
2,什么是适配器设计模式
这里就可以给适配器模式下一个定义了:将一个类的接口转换为客户端需要的另外一个接口,使得原本不能在一起工作的两个接口可以相互工作。
3,怎么使用适配器设计模式
夏天到了,我们需要降热消暑,这个时候我们降热消暑的方式有吹空调,吃冰淇淋,游泳等方式,但是我也想通过喝咖啡来降热消暑,嗯这里就可以使用适配器模式来解决这个问题.
我们可以把咖啡放入冰箱里冷藏就可以起到降温的作用,这里冰箱就充当了适配器的作用。
下面是UML类图:
这里我有必要解释一下Colddrink.class和DrinkCoffee.class这两个类,Colddrink在这里充当的是适配器,DrinkCoffee则是被适配的类.
源代码:
Cooling.interface
public interface Cooling {
public void coolingFunc();
}
Airconditioning.class
public class Airconditioning implements Cooling{
@Override
public void coolingFunc() {
// TODO Auto-generated method stub
System.out.println("通过空调降温消暑");
}
}
Swim.class
public class Swim implements Cooling{
@Override
public void coolingFunc() {
// TODO Auto-generated method stub
System.out.println("通过游泳降温消暑");
}
}
EatIce.class
public class EatIce implements Cooling{
@Override
public void coolingFunc() {
// TODO Auto-generated method stub
System.out.println("通过吃冰淇淋降温消暑");
}
}
Colddrink.class
//这个类充当了适配器
public class Colddrink implements Cooling{
DrinkCoffee drinkCoffee = null;
public Colddrink(DrinkCoffee drinkCoffee) {
// TODO Auto-generated constructor stub
this.drinkCoffee = drinkCoffee;
}
@Override
public void coolingFunc() {
// TODO Auto-generated method stub
System.out.println("放入冰箱制冷使其有降温消暑的功效");
drinkCoffee.drinkCoffee();
}
}
DrinkCoffee.class
//这是被适配的
public class DrinkCoffee {
public void drinkCoffee(){
System.out.println("喝咖啡");
}
}
People.class
public class People {
Cooling cooling;
public void setCooling(Cooling cooling){
this.cooling = cooling;
}
//用来降温的方法
public void runCooling(){
if(cooling != null){
cooling.coolingFunc();
}
else{
System.out.println("你还没有设置降温的方法,请设置降温的方法");
}
}
}
Main.class
public class Main {
public static void main(String[] args){
People p = new People();
Airconditioning airconditioning = new Airconditioning();
p.setCooling(airconditioning);
p.runCooling();
Colddrink colddrink = new Colddrink(new DrinkCoffee());
p.setCooling(colddrink);
p.runCooling();
}
}
最后输出:
通过空调降温消暑
放入冰箱制冷使其有降温消暑的功效
喝咖啡