设计模式之适配器模式

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();
	}
}
最后输出:

通过空调降温消暑
放入冰箱制冷使其有降温消暑的功效
喝咖啡


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值