一、适配器模式是什么
一张图说明问题
英文 解释 | 作用 |
---|---|
Clinet 客户端 | 就是使用这些方法的类,假设需要使用函数B |
Adapter 适配器 | 作用就是将一种接口换成另一种,代码中的体现,你可能原本需要调用通过名字A调用某个函数,现在名字B也可以了。 |
Adaptee 被适配者 | 也就是函数A的拥有者 |
总而言之,就是为了将一种方法/接口映射成为另一种方法/接口。
二、例子
总体框架
有两个类,一个Person
,一个Pig
还有一个接口IAnimal,里面有两个方法,eat和drink
client想要调用里面的两个方法eat和drink
Person
无法直接调用,所以就给他加个适配器,也就是PersonAdapter
类
代码
首先来看接口
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(适配者)进行调用。
总结
就是完成了个接口映射
有什么改进的地方,欢迎大家留言~