…
好记性不如烂笔头,记录一下设计模式的适配器模式。
什么是适配器?
在生活中充电器我们都用过,去国外出差可能会发现我们的充电器可能需要再套一层转换器才可以使用,而这个转换器就是我们今天要说的适配器模式–Adapter。
案例
介绍完毕,那么我们开始直接说下如何使用吧!
这里定义鸭子接口Duck,再定义火鸡接口Turkey。
鸭子拥有嘎嘎嘎的叫声和飞,而火鸡是没办法嘎嘎嘎的叫的,那么我们可以新建一个适配类,将火鸡包装一下放进去即可
- 以下定义鸭子
interface Duck{
public void quack();
public void fly();
}
class MallardDuck implements Duck{
@Override
public void quack() {
System.out.println("Duck Quack");
}
@Override
public void fly() {
System.out.println("Duck Flying");
}
}
- 再接着定义火鸡以及适配鸭子
interface Turkey{
public void gobble();
public void fly();
}
class WildTurkey implements Turkey{
@Override
public void gobble() {
System.out.println("a wild turkey gobble");
}
@Override
public void fly() {
System.out.println("a wild turkey is flying a short distance.");
}
}
class DuckAdapter implements Duck{
Turkey turkey;
public DuckAdapter(Turkey turkey) {
this.turkey = turkey;
}
@Override
public void quack() {
turkey.gobble();
}
@Override
public void fly() {
for (int i = 0; i < 5; i++) {
turkey.fly();
}
}
}
- 最后实验发现发现都可以使用啦
public class AdapterDemo {
public static void main(String[] args) {
Duck duck = new MallardDuck();
Turkey turkey = new WildTurkey();
DuckAdapter duckAdapter = new DuckAdapter(turkey);
testDuck(duck);
turkey.gobble();
turkey.fly();
testDuck(duckAdapter);
}
static void testDuck(Duck duck){
duck.quack();
duck.fly();
}
}
总结
适配器的优点:
1、可以让任何两个没有关联的类一起运行。
2、提高了类的复用。
3、增加了类的透明度。
4、灵活性好。
缺点:
如果适配器多了就意味着明明是A类却有B类的形式构建,就会显得整体项目很乱。