一. 定义
适配器模式将一个类的接口,转换为客户期望的另一种接口。适配器让原本不兼容的类可以合作无间。
二. 模式起源
三. 设计原则
四. UML图
五. 代码
5.1 鸭子接口
package model.adapter;
/**
* 鸭子接口
*/
public interface Duck {
/**
* 呱呱叫方法
*/
public abstract void quack();
/**
* 飞方法
*/
public abstract void fly();
}
5.2 A鸭子类
package model.adapter;
/**
* A鸭子类
*/
public class ADuck implements Duck {
@Override
public void quack() {
System.out.println("gua gua gua...");
}
@Override
public void fly() {
System.out.println("i am flying...");
}
}
5.3 火鸡接口
package model.adapter;
/**
* 火鸡接口
*/
public interface Turkey {
/**
* 咯咯叫方法
*/
public abstract void gobble();
/**
* 飞方法
*/
public abstract void fly();
}
5.4 A火鸡类
package model.adapter;
/**
* A火鸡接口
*/
public class ATurkey implements Turkey {
@Override
public void gobble() {
System.out.println("ge ge ge...");
}
@Override
public void fly() {
System.out.println("i am flying a short distance...");
}
}
5.5 火鸡适配器类
package model.adapter;
/**
* 火鸡适配器类 适配鸭子接口
*/
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();
}
}
}
5.6 测试
package model.adapter;
/**
* 测试类
*/
public class Main {
public static void main(String[] args) {
// 鸭子叫和飞
Duck aDuck = new ADuck();
aDuck.quack();
aDuck.fly();
// 火鸡叫和飞
Turkey aTurkey = new ATurkey();
aTurkey.gobble();
aTurkey.fly();
// 现在使用火鸡适配器类将火鸡充当为假鸭子,进行叫和飞
TurkeyAdapter fakeDuck = new TurkeyAdapter(aTurkey);
fakeDuck.quack();
fakeDuck.fly();
}
}
5.7 结果
gua gua gua...
i am flying...
ge ge ge...
i am flying a short distance...
ge ge ge...
i am flying a short distance...
i am flying a short distance...
i am flying a short distance...
i am flying a short distance...
i am flying a short distance...
六. 感悟
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/17806.html