设计模式之适配器模式

  • 简介
    当我们需要使用某个对象的功能,但是我们没有这个对象时,我们可以用适配器和替换对象来实现这个功能.比如我们手机有typec接口,但是我们没有这个接口的耳机,我们可以用typec转3.5mm的线和耳机和手机连上,我们就可以用3.5mm耳机听到音乐

  • 模式应用

  • 类图

  • 源码实现

点击查看代码
package designpattern.proxy.adapter;

//typc插头的耳机 可以插有typec口的手机
public interface EarphoneTypeCPlug {

    public void soundByTypeC();
}

点击查看代码
package designpattern.proxy.adapter;

//3.5插头的耳机 可以插有3.5mm口的未来科技手机
public interface Earphone3_5mmPlug {

    public void soundBy3_5mm();
}

这是一个手机,手机可以连上typec插头,可以放音乐

点击查看代码
package designpattern.proxy.adapter;

public class HuaweiPhone {

    private EarphoneTypeCPlug earphoneTypeCPlug = null;

    //插上TypeCPlug的耳机
    public void link(EarphoneTypeCPlug earphoneTypeCPlug) {
        this.earphoneTypeCPlug = earphoneTypeCPlug;
    }

    public void music(){
        if(earphoneTypeCPlug!=null){
            System.out.println("音乐通过typec耳机在播放");
            earphoneTypeCPlug.soundByTypeC();
        }else{
            System.out.println("手机外发...");
        }
    }


}

这是3.5mm的耳机

点击查看代码
package designpattern.proxy.adapter;

//3.5mm耳机
public class Earphone3_5mm implements Earphone3_5mmPlug {
    @Override
    public void soundBy3_5mm() {
        System.out.println("这是来自未来科技3.5mm耳机的声音...");
    }
}

这是我们的转化线,也就是适配器

点击查看代码
package designpattern.proxy.adapter;

public class AdapterTypeC2_3_5mm implements Earphone3_5mmPlug,EarphoneTypeCPlug{

    private Earphone3_5mmPlug plug1;

    //插上3.5mm耳机
    public void link(Earphone3_5mmPlug plug1) {
        this.plug1 = plug1;
    }

    @Override
    public void soundBy3_5mm() {

    }

    @Override
    public void soundByTypeC() {
        System.out.println("转接线在工作...");
        plug1.soundBy3_5mm();
    }
}

现在我们来测试下,耳机能不能正常工作

点击查看代码
package designpattern.proxy.adapter;

public class Client {

    public static void main(String[] args) {
        //我有一个华为手机
        HuaweiPhone phone = new HuaweiPhone();

        //我有一副3.5的耳机
        Earphone3_5mm earphone3_5mm = new Earphone3_5mm();

        //我买了一根转接线
        AdapterTypeC2_3_5mm adapterTypeC2_3_5mm = new AdapterTypeC2_3_5mm();

        //把耳机插到转接线上
        adapterTypeC2_3_5mm.link(earphone3_5mm);

        //把转接线插到手机上
        phone.link(adapterTypeC2_3_5mm);

        //播放音乐
        phone.music();

    }
}

结果如下

posted @ 2023-02-25 13:36  佳琪如梦  阅读(10)  评论(0编辑  收藏  举报