Java设计模式之适配器模式

来源:互联网 发布:商家怎么开通淘宝客 编辑:程序博客网 时间:2024/06/05 16:50

引用的视频:模式的秘密-适配器模式-慕课网

适配器分析

这里写图片描述

看到图片的朋友可能会一脸懵逼,下面我就举例一个简单例子说明一下:
比如你买了一部港版的iPhone X,它的充电线是三脚插头,而你仅有现在全都是两脚的插座,这个时候你的iPhone X要充电就必须要一个转换器啦
这里的三脚插足是target,adaptee是全都是两脚的插座,Adapter是转换器,Client是iPhone X

1.iPhoneX

/** * Client */public class IPhoneX {    private ThreePlugs threePlugs;    public IPhoneX(ThreePlugs threePlugs) {        this.threePlugs = threePlugs;    }    public void charge() {        threePlugs.chargeWithThreePlugs();    }    public static void main(String... args) {        TwoPlugs twoPlugs = new TwoPlugs();        //这里便要思考一下iPhone X怎么充电了???        ThreePlugs threePlugs = new AdapterImpl(twoPlugs);        IPhoneX iPhoneX = new IPhoneX(threePlugs);        iPhoneX.charge();    }}

2.ThreePlugs

/** * 港版iPhone X使用的插头 */public interface ThreePlugs {    /**     * 使用三脚插头为iPhone X充电     */    void chargeWithThreePlugs();}

3.TwoPlugs

/** * 使用二脚插座为iPhone X充电 */public class TwoPlugs {    public void chargeWithTwoPlugs() {        System.out.println("使用二脚插座为iPhone X充电");    }}

4.AdapterImpl(使用组合的方式解决-推荐)

/** * 使用组合的方式三脚转换为二脚 */public class AdapterImpl implements ThreePlugs {    private TwoPlugs twoPlugs;    public AdapterImpl(TwoPlugs twoPlugs) {        this.twoPlugs = twoPlugs;    }    @Override    public void chargeWithThreePlugs() {        System.out.println("使用组合的方式实现兼容充电");        twoPlugs.chargeWithTwoPlugs();    }}

5.AdapterExtends(使用继承的方式解决)

/** * 使用继承的方式兼容 */public class AdapterExtends extends  TwoPlugs implements ThreePlugs {    @Override    public void chargeWithThreePlugs() {        System.out.println("通过继承的方式实现兼容充电");        this.chargeWithTwoPlugs();    }}

结果:
这里写图片描述

适配器分类

  • 组合
    • 采用组合方式的适配器成为对象适配器
    • 特点:把”被适配器”作为一个对象组合到适配器类中,以修改目标接头包装被适配者
  • 继承
    • 采用继承方式的称为类适配器
    • 特点:通过多重继承不兼容接口,实现对目标接口的匹配,单一的为某个类而实现适配

作用

这里写图片描述

原创粉丝点击