读《HeadFirst设计模式》笔记之适配器模式

适配器模式:将一个类的接口,转换成客户指望的另外一个接口。适配器让本来接口不兼容的类能够合做无间java

一个图很信息的说明适配器模式:this

                    

举个栗子:3d

还记得策略模式中的鸭子嘛!如今有一个火鸡想加入到鸭子的队列中。但火鸡不会呱呱的叫,只会咕咕的叫,能飞,但不能像鸭子(野鸭)飞那么远。那么咱们就来包装下吧。code

这是火鸡的接口对象

public interface Turkey {
    public void gobble();
    public void fly();
}

火鸡的实现:blog

public class WildTurkey implements Turkey {
    public void gobble() {
        System.out.println("Gobble gobble");
    }

    public void fly() {
        System.out.println("i am flying a short distance");
    }
}

还记得鸭子的接口吗?接口

public interface Duck {
    public void quack();
    public void fly();
}

显然火鸡的接口和鸭子的接口不匹配,因此咱们来作一个适配器吧!队列

public class TurkeyAdapter implements Duck {
    Turkey turkey;

    public TurkeyAdapter(Turkey turkey) {
        this.turkey = turkey;
    }

    // 包装叫声,符合鸭子接口
    public void quack() {
        turkey.gobble();
    }

    // 包装飞行,飞5次,追上鸭子的飞行距离
    public void fly() {
        for (int i = 0; i < 5; i++) {
            turkey.fly
        }
    }
}

咱们开始使用这个鸭子了:class

public class DuckTestDrive() {
    WildTurkey turkey = new WildTurkey();

    // 火鸡假装鸭子
    Duck turkeyAdapter = new TurkeyAdapter(turkey);
  
    turkeyAdapter.quack();

    turkeyAdapter.fly();
}

火鸡成功假装成鸭子了!那么为何火鸡要假装成鸭子呢?im

不想改变原有的两个接口,又想让两个接口合做,那么就用适配器实现两个接口的对接

适配器模式和装饰者模式区别:适配器将一个对象包装起来以改变其接口;装饰者将一个对象包装起来以增长新的行为和责任

相关文章
相关标签/搜索