java适配器模式

下面是正文

目的

把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配无法工作的两个类能够一起工作。

生活中的例子

TypeC转3.5mm耳机插孔,TypeC手机充电口转MicroUsb充电接口。

主要作用

将两个不匹配无法工作的接口通过Adapter接口,使得两个接口可以一起工作。

表现形式

对象适配模式、类适配模式、缺省适配模式(接口适配模式)

实例

这里以Type手机的接口使用带有3.5mm的耳机为例:

3.5mm耳机接口

/**
 * Jack3_5 接口
 *
 * 表示 3.5毫米的耳机插孔
 * */
public interface Jack3_5 {
    void use3_5playMusic();
}

typec接口

/**
 * TypeC接口
 *
 * 表示typec插孔的手机
 * */
public interface TypeCJack {
//播放音乐
    void useTypeCPlayMusic();
    //充电
    void charge();
}

3.5mm插孔耳机

/**
 * 这是一个实体类,表示一个3.5mm插孔的耳机实体
 * */
public class Jack_35mm implements Jack3_5{

    @Override
    public void use3_5playMusic() {
        System.out.println("正在播放出优美的音乐。。。。。。");
    }
}

对象适配器

/**
 * 这是一个对象适配器类
 *
 * 将typec接口 转接为 3.5mm的接口
 * */
public class ObjectAdapter implements TypeCJack{

    private Jack_35mm jack_35mm;

    public ObjectAdapter(Jack_35mm jack_35mm){
        this.jack_35mm = jack_35mm;
    }

    @Override
    public void useTypeCPlayMusic() {
        jack_35mm.use3_5playMusic();
    }
}

类适配器

/**
 * 这是一个类适配器类
 *
 * 将typec接口 转接为 3.5mm的接口
 * */
public class ClassAdapter extends Jack_35mm implements TypeCJack{
    @Override
    public void useTypeCPlayMusic() {
        use3_5playMusic();
    }
}

测试

/**
 * Java适配器模式 事例代码
 *
 * 这是Adapter模式的入口类
 *
 * 现在要实现的是将Typec接口的耳机插孔通过3.5mm的耳机放出音乐
 *
 * 这里就需要一个转接线,将typec接口转接为3.5mm的接口,然后3.5mm的耳机就可以正常使用了
 * */
public class AdapterMain {


    public static void main(String[] args){

        //对象适配器
        Jack_35mm jack_35mm = new Jack_35mm();
        ObjectAdaptee objectAdapter = new ObjectAdaptee(jack_35mm);
        objectAdaptee.useTypeCPlayMusic();

        //类适配模式
        ClassAdaptee classAdapter = new ClassAdapter();
        classAdapter.useTypeCPlayMusic();

    }
}

输出结果
适配器模式输出结果

对象适配模式和类适配模式不同

1、对象适配模式通过组合关系实现,可以对子类适配
类适配模式通过继承关系实现,无法对子类进行适配

缺省适配模式

为一个接口提供缺省实现,这样子类型可以从这个缺省实现进行扩展,不必再从原接口进行扩展。

TypeC接口不仅能实现插耳机播放音乐,也能实现通过数据线进行充电。使用同一个接口不能同时进行充电和播放音乐,所以我们现在使用缺省适配模式对其充电方法进行适配,而不需要从原接口适配。

/**
 * 这是缺省适配模式
 * 使用抽象类实现TypeC接口的充电功能
 * 当需要使用充电功能的时候,只需要实现这个抽象类
 * 而不必实现原有的TypeC接口
 * */
public abstract class InterfaceAdapter implements TypeCJack {
    @Override
    public void useTypeCPlayMusic() {

    }

    @Override
    public void charge() {

    }
}

/**
 * 实现充电操作
 * 只需要继承缺省实现的适配器
 * 而不需要实现原有接口
 * */
class ChargeOperat extends InterfaceAdapter {

    @Override
    public void charge() {
        System.out.println("正在进行充电操作。。。。。。");
    }
}

注意事项

适配器模式不应该在项目设计之初使用,是为了解决老项目与新功能之间相匹配使用的。

[Java]设计模式源码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值