一、适配器模式
将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
二、举例
请设一个类,要求如下:
- 鸭子类
- 火鸡类
- 火鸡可以适配鸭子的接口
鸭子接口类
package com.jackeys.AdapterMode;
/**
* @Description: 鸭子接口
* @ClassName: Duck
* @Package com.jackeys.AdapterMode
* @Author: Jackeys 1623427047@qq.com
* @Copyright 版权归Jackeys企业(或个人)所有
* @CreateTime: 2021/10/19 16:36
* @Version: 1.0
*/
public interface Duck {
void quack();
void fly();
}
绿头鸭类
package com.jackeys.AdapterMode;
/**
* @Description: 绿头鸭
* @ClassName: MallardDuck
* @Package com.jackeys.AdapterMode
* @Author: Jackeys 1623427047@qq.com
* @Copyright 版权归Jackeys企业(或个人)所有
* @CreateTime: 2021/10/19 16:39
* @Version: 1.0
*/
public class MallardDuck implements Duck{
@Override
public void quack() {
System.out.println("呱呱呱");
}
@Override
public void fly() {
System.out.println("我会飞");
}
}
火鸡接口类
package com.jackeys.AdapterMode;
/**
* @Description: 火鸡接口
* @ClassName: Turkey
* @Package com.jackeys.AdapterMode
* @Author: Jackeys 1623427047@qq.com
* @Copyright 版权归Jackeys企业(或个人)所有
* @CreateTime: 2021/10/19 16:40
* @Version: 1.0
*/
public interface Turkey {
void gobble();
void fly();
}
野生火鸡接口类
package com.jackeys.AdapterMode;
/**
* @Description: 野生火鸡
* @ClassName: WildTurkey
* @Package com.jackeys.AdapterMode
* @Author: Jackeys 1623427047@qq.com
* @Copyright 版权归Jackeys企业(或个人)所有
* @CreateTime: 2021/10/19 16:41
* @Version: 1.0
*/
public class WildTurkey implements Turkey{
@Override
public void gobble() {
System.out.println("咯咯咯");
}
@Override
public void fly() {
System.out.println("我只能飞很短的距离");
}
}
火鸡适配器类
package com.jackeys.AdapterMode;
/**
* @Description: 火鸡适配器
* @ClassName: TurkeyAdapter
* @Package com.jackeys.AdapterMode
* @Author: Jackeys 1623427047@qq.com
* @Copyright 版权归Jackeys企业(或个人)所有
* @CreateTime: 2021/10/19 16:43
* @Version: 1.0
*/
public class TurkeyAdapter implements Duck {
private Turkey turkey;
public TurkeyAdapter(Turkey turkey) {
this.turkey = turkey;
}
@Override
public void quack() {
this.turkey.gobble();
}
@Override
public void fly() {
for (int i = 0; i < 5; i++) {
this.turkey.fly();
}
}
}
测试
package com.jackeys.AdapterMode;
/**
* @Description: 测试适配器模式
* @ClassName: Test
* @Package com.jackeys.AdapterMode
* @Author: Jackeys 1623427047@qq.com
* @Copyright 版权归Jackeys企业(或个人)所有
* @CreateTime: 2021/10/19 16:45
* @Version: 1.0
*/
public class Test {
public static void main(String[] args) {
WildTurkey wildTurkey = new WildTurkey();
Duck turkeyAdapter = new TurkeyAdapter(wildTurkey);
turkeyAdapter.quack();
turkeyAdapter.fly();
}
}
运行截图