设计模式-适配器模式

适配器模式

将某个类的接口转换成客户端期望的另一个接口表示。使得原本由于接口不兼容而不能一起工作的那些类能在一起工作。

类适配器


/**
 * @USER: lynn
 * @DATE: 2020/4/26
 **/
public class 类适配器 {
    public static void main(String[] args) {
        充电器 phone = new 手机();
        System.out.println(phone.高压转低压());
    }
}

class 高压电{
    public int 插座(){
        int output = 220;
        return output;
    }
}
interface 充电器{
    int 高压转低压();
}
class 手机 extends 高压电 implements 充电器{

    @Override
    public int 高压转低压() {
        int 高压电 = 插座();
        //适配细节
        int 低压电 = 高压电/44;
        return 低压电;
    }
}

或者


/**
 * @USER: lynn
 * @DATE: 2020/4/26
 **/
public class 类适配器 {
    public static void main(String[] args) {
        充电器 phone = new 手机();
        System.out.println(phone.高压转低压());
    }
}

abstract class 高压电 implements 充电器{
    public int 插座(){
        int output = 220;
        return output;
    }
}
interface 充电器{
    int 高压转低压();
}
class 手机 extends 高压电{

    @Override
    public int 高压转低压() {
        int 高压电 = 插座();
        //适配细节
        int 低压电 = 高压电/44;
        return 低压电;
    }
}

对象适配器

对象适配器拥有源角色的实例

/**
 * @USER: lynn
 * @DATE: 2020/4/26
 **/
public class 对象适配器 {
    public static void main(String[] args) {
        充电器 phone = new 手机对象(new 高压电());
        System.out.println(phone.高压转低压());
    }
}

class 手机对象 extends 高压电 implements 充电器{

    private 高压电 伏220高压电;

    public 手机对象(高压电 伏220高压电) {
        this.伏220高压电 = 伏220高压电;
    }

    @Override
    public int 高压转低压() {
        int 高压电 = 伏220高压电.插座();
        //适配细节
        int 低压电 = 高压电/44;
        return 低压电;
    }
}

接口适配器

通过抽象类来实现适配


/**
 * @USER: lynn
 * @DATE: 2020/4/26
 **/
public class 接口适配器 {
    public static void main(String[] args) {
        手机输入 phone = new 手机适配器(new 工业插座());
        System.out.println("输出后电压"+phone.输入电压());
        phone = new 手机适配器(new 家庭插座());
        System.out.println("输出后电压"+phone.输入电压());
    }
}

abstract class 插座{
    public int 输出电压(){
        return 200;
    }
}
class 家庭插座 extends 插座{
    @Override
    public int 输出电压() {
        return 220;
    }
}
class 工业插座 extends 插座{
    @Override
    public int 输出电压() {
        return 440;
    }
}
interface 手机输入{
    int 输入电压();
}

class 手机适配器 implements 手机输入{

    private 插座 chazuo;

    public 手机适配器(家庭插座 jiatingchazuo) {
        this.chazuo = jiatingchazuo;
    }

    public 手机适配器(工业插座 gongyechazuo) {
        this.chazuo = gongyechazuo;
    }

    @Override
    public int 输入电压() {
        if (chazuo !=null){
            System.out.println("输出前电压:"+chazuo.输出电压());
        }
        //适配逻辑
        return 5;
    }
}
  • 使用场景
    • 项目接口的新需求,不用更改老代码,实现代码兼容

更多请访问Github主页 Github/Cynaith

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。