适配器模式(有图有例子)


一、适配器模式是什么

一张图说明问题
在这里插入图片描述

英文 解释作用
Clinet 客户端就是使用这些方法的类,假设需要使用函数B
Adapter 适配器作用就是将一种接口换成另一种,代码中的体现,你可能原本需要调用通过名字A调用某个函数,现在名字B也可以了。
Adaptee 被适配者也就是函数A的拥有者

总而言之,就是为了将一种方法/接口映射成为另一种方法/接口。

二、例子

总体框架

有两个类,一个Person,一个Pig
还有一个接口IAnimal,里面有两个方法,eat和drink
client想要调用里面的两个方法eat和drink
Person无法直接调用,所以就给他加个适配器,也就是PersonAdapter

client 我就负责调用eat和drink PersonAdpater eat() drink() Pig eat() drink() «interface» IAnimal eat() drink() Person eatStepOne eatStepTwo drinkSomething

代码

首先来看接口

public interface IAnimal {
    void eat();
    void drink();
}

Pig规规矩矩实现这个接口

public class Pig implements IAnimal {
    @Override
    public void eat() {
        System.out.println("我是一头猪,我在吃东西....");
    }

    @Override
    public void drink() {
        System.out.println("我是一头猪,我在喝水....");
    }
}

client创建一头猪并且调用这两个方法

public class client {
    public static void main(String[] args) {
        IAnimal pig = new Pig();
        pig.eat();
        pig.drink();
    }
}

调用结果:
在这里插入图片描述
创建一个Person类,人比较特殊,吃东西非得分两步,并且有自己喝东西的方法。

public class Person {
    public void eatStepOne() {
        System.out.println("我是一个人,我在吃水果....");
    }

    public void eatStepTwo() {
        System.out.println("我是一个人,我在吃主食....");
    }

    public void drinkSomething() {
        System.out.println("我是一个人,我在喝水....");
    }
}

假设并不想改变client中的调用(也就是还想通过eat和drink来调用Person类中的方法),就需要创建适配器— PersonAdapter

public class PersonAdapter extends Person implements IAnimal {
    private Person person;

    PersonAdapter(Person person) {
        this.person = person;
    }

    @Override
    public void eat() {
        person.eatStepOne();
        person.eatStepTwo();
    }

    @Override
    public void drink() {
        person.drinkSomething();
    }
}

该类继承Person并且实现IAnimal接口
当client想要调用Person中的方法时,只需要改变创建的那里,代码如下:

public class client {
    public static void main(String[] args) {
        IAnimal pig = new PersonAdapter(new Person());
//        IAnimal pig = new Pig();
        pig.eat();
        pig.drink();
    }
}

调用结果:
在这里插入图片描述

普适框架

作用:将Adaptee(被适配者)中的方法映射为IFunction接口中的方法,clinet通过Adapter(适配者)进行调用。

client «interface» IFunction Adapter Adaptee

总结

就是完成了个接口映射

有什么改进的地方,欢迎大家留言~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值