适配器模式的使用场景,举个栗子就是,大黄蜂的声带坏了,每次都去找其他能发音的喇叭代替;虽然发出的声音有点怪,总归能发声了~
在Java中如何实现呢,比如现在有一声卡,只能发出女人的声音;而大黄蜂这个类,想带上这个声卡从而说话,如何实现?
- 将WomenSoundCard的speak()方法,抽象到SoundCard接口的speak中
- WomenSoundCard实现SoundCard接口
- BigBee的属性中,设置一个SoundCard的属性,并赋值为WomenSoundCard的类型,并且实现SoundCard接口,然后实现speak方法,在speak方法中,只需要调用SoundCard属性的speak方法即可;
实现以上三部,大黄蜂就能发出女人的声音了~
package com.git.poan.designparttern;
class WomenSoundCard implements SoundCard {
@Override
public void speak() {
System.out.println("婴婴婴~");
}
}
interface SoundCard {
void speak();
}
public class BigBee implements SoundCard{
private SoundCard soundCard = new WomenSoundCard();
@Override
public void speak() {
soundCard.speak();
}
public static void main(String[] args) {
BigBee bigBee = new BigBee();
bigBee.speak();
}
}
在实际项目中,如果一个类A想要调用与他没有任何关系的类B中方法,直接耦合B类,通过B类的实例调用不就行了;但是这样不能很直观的提现B类方法的适配,通过将B类的方法抽象并让AB类去实现,A类通过B类实例去调用来实现抽象方法,这样能让看代码的人一目了然,知道该方法是适配而来。 毕竟代码完成功能只是初衷,能让大家看懂就更好了~