适配器模式

适配器模式定义

适配器就是把一个类,转换成用户所期待的另外一个类,从而做到两个不同的类进行无间合作,进行了兼容。

角色

用户:使用接口的实体

目标接口:用户所能使用的接口

适配类:把被适配类的接口,适配成目标接口

被适配类:用目标接口不兼容的类

使用场景

本人电脑的充电器插头是美式插头,中国插座是使用的中式插头,所以需要一个转换器,才能在国内给我的电脑充电
用户: 本人
目标接口:中式插头


中式插头.jpg

适配类:转接头


转换器.jpg

被适配类:美式插头
美式插头.jpg

代码实现方式一

通过组合来实现适配器功能

UML

Package type1.png

代码

package com.swh.design.adapter;

public interface AmericanPlug {


    void  americanPlug();

}
package com.swh.design.adapter;

public class AmericanPlugImpl implements AmericanPlug{
    @Override
    public void americanPlug() {
        System.out.println("使用美国充电插头充电");
    }
}

package com.swh.design.adapter;

public interface ChinesePlug {

    void chainesePlug();
}
package com.swh.design.adapter.type1;

import com.swh.design.adapter.AmericanPlug;
import com.swh.design.adapter.ChinesePlug;

public class Adapter implements ChinesePlug {
    private AmericanPlug americanPlug;

    public Adapter(AmericanPlug americanPlug) {
        this.americanPlug = americanPlug;
    }

    @Override
    public void chainesePlug() {
        System.out.println("使用转换器把美式插头转换成中式插头");
        americanPlug.americanPlug();
    }
}
package com.swh.design.adapter.type1;

import com.swh.design.adapter.AmericanPlug;
import com.swh.design.adapter.AmericanPlugImpl;
import com.swh.design.adapter.ChinesePlug;

public class User {
    public static void main(String[] args) {
        AmericanPlug americanPlug = new AmericanPlugImpl();
        ChinesePlug chinesePlug = new Adapter(americanPlug);

        chinesePlug.chainesePlug();
    }
}

使用了转换器把美式插头兼容成了中式插头,解决了实际的问题

代码实现方式二

package com.swh.design.adapter;

public interface AmericanPlug {


    void  americanPlug();

}
package com.swh.design.adapter;

public class AmericanPlugImpl implements AmericanPlug{
    @Override
    public void americanPlug() {
        System.out.println("使用美国充电插头充电");
    }
}

package com.swh.design.adapter;

public interface ChinesePlug {

    void chainesePlug();
}
package com.swh.design.adapter.type2;

import com.swh.design.adapter.AmericanPlugImpl;
import com.swh.design.adapter.ChinesePlug;

public class Adapter extends AmericanPlugImpl implements ChinesePlug {
    @Override
    public void chainesePlug() {
        System.out.println("使用转换器把美式抽头转换成中式插头");
        super.americanPlug();
    }
}
package com.swh.design.adapter.type2;

import com.swh.design.adapter.ChinesePlug;

public class User {

    public static void main(String[] args) {
        ChinesePlug chinesePlug = new Adapter();
        chinesePlug.chainesePlug();
    }
}

你可能感兴趣的:(适配器模式)