6) Adapter Pattern

发布时间 2023-06-06 13:27:42作者: zno2

类别:

 Structural Pattern

问题:

什么是接口?
按照标准提供服务,其他想要使用该接口的要按照该标准接入服务

什么是依赖?
持有目标对象,拥有使用权(A use B)

数据线?
数据线按USB标准接入充电宝,通过lightning 提供充电服务

手机?
通过lightning标准接入数据线

 

 

客户端因种种限制只能接入目标接口

服务器因种种限制只能提供某个固定接口

方案:

 

 

示例:

 

 

Power.java

package foo;

public class Power {

}

PowerBank.java

package foo;

public class PowerBank implements Usb {

    Power[] powers;

    @Override
    public Power discharge() {
        return null;
    }

}

MobilePhone.java

package foo;

public class MobilePhone {

    /**
     * 手机 use 数据线
     */
    Lightning lightning;

    public void charge() {
        Power power = lightning.discharge();
        // TODO 获取电量
    }
}

Adapter.java

package foo;

public class Adapter implements Lightning {

    /**
     * 数据线use 充电宝
     */
    private Usb usb;

    @Override
    public Power discharge() {
        return usb.discharge();
    }

}

Usb.java

package foo;

/**
 * 充电宝实现了usb接口,可放电
 * 
 * @author witas
 *
 */
public interface Usb {

    public Power discharge();
}

Lightning.java

package foo;

/**
 * 数据线提供了lightning接口,可以放电
 * 
 * @author witas
 *
 */
public interface Lightning {

    public Power discharge();
}

 

 

 

分析:

提供服务的是接口的实现类

消费服务的要可以接入服务

消费者接入的接口不能变(客观原因)

生产者提供的接口不能变(客观原因)

适配器实现消费者接入的固定接口,自己本身不生产,需要从生产者那里获取,转交给消费者

应用:

 

不足:(

 

优化:)