设计模式--------适配器模式

设计模式--------适配器模式

采用三个问题说明适配器模式

  • 现在的写法有什么问题?
  • 什么是适配器模式
  • 适配器模式有什么好处

使用一个问题来说明问题

  • 有一个公司训练蜂鸟,让蜂鸟听命令飞和走路,现在他们引进了新品种,非洲鸵鸟,他们属于不同的种类,蜂鸟属于鸟,非洲鸵鸟属于鸵鸟,现在要使用训练蜂鸟的方式训练鸵鸟,让他们也能走路和飞

目前思路

  • 蜂鸟属于鸟的接口
  • 非洲鸵鸟属于鸵鸟的接口
  • 他们是二个完全不同的类,无法差生关联,所以没有办法

什么是适配器模式

  • 什么是适配器: 适配器类似于插座和插孔,大陆用的二个针的插座,但是到了香港就需要使用一个转接头将二个针的转换成三个针的
    • 客户:目标接口(鸟)
    • 适配器:实现了目标接口,并持有被适配者的实例(鸵鸟适配器)
    • 被适配者:(鸵鸟)
  • 适配器模式: 将一个类的接口,转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以合作无间
  • 此模式可以通过创建适配器进行接口转换,让不兼容的接口编程兼容,这可以让客户从实现的接口解耦,如果需要改变接口,适配器可以改变的部分封装起来,客户就不必应对不同的接口而每次改变

Bird

public interface Bird {
    
    public void walk();

    public void fly();
    
}

Hummingbird 蜂鸟

public class Hummingbird implements Bird {

    @Override
    public void walk() {
        System.out.println("Hummingbird walk");

    }

    @Override
    public void fly() {
        System.out.println("Hummingbird fly");

    }    
}

鸵鸟接口

public interface Ostrich {
    
    public void walk();

    public void fly();
    
}

非洲鸵鸟

public class AfricanOstrich implements Ostrich {

    @Override
    public void walk() {
        System.out.println("AfricanOstrich walk");

    }

    @Override
    public void fly() {
        System.out.println("AfricanOstrich fly");

    }
    
}

鸵鸟适配器


public class OstrichAdapter implements Bird {

    public Ostrich ostrich;

    public OstrichAdapter(Ostrich ostrich) {
        this.ostrich = ostrich;
    }

    @Override
    public void walk() {
        ostrich.walk();    
    }

    @Override
    public void fly() {
        ostrich.fly();
    }
    
}

Main


public class App {
    public static void main(String[] args) throws Exception {

        Bird bird = new Hummingbird();
        bird.walk();
        bird.fly();


        Ostrich ostrich = new AfricanOstrich();
        ostrich.walk();
        ostrich.fly();

        bird = new OstrichAdapter(ostrich);
        bird.walk();
        bird.fly();

    }
}
/// out

Hummingbird walk
Hummingbird fly
AfricanOstrich walk
AfricanOstrich fly
AfricanOstrich walk
AfricanOstrich fly

适配器模式有什么好处?

  • 可以让不兼容的接口编程兼容
  • 可以让客户从实现的接口解耦
  • 使用对象组合
  • 任何适配器的子类都可以使用适配器

END

不慕招式,勤修内功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值