设计模式之结构型-适配器模式(6)

定义:将一个类的接口转换成客户希望的另一个类的接口。使原本由于接口不兼容不能工作的类可以一起工作
关于适配器,举个很简单的例子:我们以前买的水货手机,原装的充电器一般不能在国内使用,这个时候就需要转换头(适配器)来帮忙以达到国内使用的目的。
代码中分为三种,1类的适配器模式,2对象的适配器模式,3接口适配器
我们先来看看类的适配器模式的类图
类的适配器模式

其中:
Targetable:目标接口,所期待获得的接口
Source:目标源,需要进行适配的类
adapter:适配器,把元借款转换成目标接口

下面我们用代码实现


public interface Targetable {
    //目标接口

    void  method1();

    void  method2();
}


public class Source {
    public void  method1(){
        System.out.print("这是source的方法method1");
    };
}

public class Adapter extends Source implements Targetable {


    @Override
    public void method2() {
        System.out.print("这是adapter适配的方法method2");
    }
}

最后是测试类
public class Test {
    public static void main(String[] args) {
        Targetable targetable=new Adapter();
        targetable.method1();
        targetable.method2();
    }
}

输出:这是source的方法method1
这是adapter适配的方法method2

这样经过适配后targetable接口的实现类拥有了source类的功能

对象的适配器模式
这里写图片描述

与类的适配器模式不同的是,对象的适配器不采用继承的 关系连接到source类,而是采用委派的关系连接。
下面是实现代码,在类的适配器模式上稍加改变

public interface Targetable {
    //目标接口

    void  method1();

    void  method2();
}

public class Source {
    public void  method1(){
        System.out.print("这是source的方法method1");
    };
}



public class Adapter implements Targetable {

    private final Source source;

    public Adapter(Source source) {
        this.source=source;
    }

    @Override
    public void method1() {
        source.method1();
    }

    @Override
    public void method2() {
        System.out.print("这是adapter适配的方法method2");
    }
}

最后是测试类

public class Adapter implements Targetable {

    private final Source source;

    public Adapter(Source source) {
        this.source=source;
    }

    @Override
    public void method1() {
        source.method1();
    }

    @Override
    public void method2() {
        System.out.print("这是adapter适配的方法method2");
    }
}

结果和上面一模一样

接口适配器模式:

首先我们看一下类图:
这里写图片描述

该模式也称谓缺省适配器,主要是因为我们一个接口中可能有多个抽象方法,我们写该类的实现类的时候,必须要实现所有方法,一些方法非必须的,这明显比较浪费,因为不是所有的方法都是我们需要的,这个时候我们借助一个抽象类,该类实现了该接口,我们继承该类重写我们需要的方法即可。

该方法较为简单,不再代码举例

类的适配器,主要针对适配目标为接口的情况下使用
对象的适配器,一般针对适配对象为类的情况下进行使用。

适配器模式的优点:
1 更好的复用性
2 更好的拓展性

缺点:

适配器一般是补救措施,不应当首先考虑使用,该模式会让系统凌乱,不易整体把握。比方说明明看到调用A的接口,实际上适配器内部调用的是B的接口的实现。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值