设计模式(四)------适配器模式

适配器模式允许不兼容的接口协同工作,通过创建适配器类来转换接口。文章分别介绍了类适配器、对象适配器和接口适配器三种形式,通过代码示例展示了如何实现接口转换,以便让不同的类在不同的场景下能够相互配合。
摘要由CSDN通过智能技术生成

前言

考虑一个问题。人会跑,鸟而会飞,如果我们跑步的时候起来,应该怎么办能,答案就是要具备鸟会飞的技能,适配器可以帮我们实现。

将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。

在适配器模式中,我们通过增加一个新的适配器类来解决接口不兼容的问题,使得原本没有任何关系的类可以协同工作。

根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适配器两种,在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承(或实现)关系。

第一种 类适配器

在这里插入图片描述
代码如下:

public interface Bird {
    public void fly();
}
/**
 * 鸽子
 */
public class Pigeon implements Bird{
    @Override
    public void fly() {
        System.out.println("飞起来了");
    }
}
public interface Human {
    public void run();
}

public class ChineseHuman extends Pigeon implements Human {
    @Override
    public void run() {
        System.out.println("跑起来了");
        fly();
    }
}
public class Test {
    public static void main(String[] args) {
        Human human = new ChineseHuman(); // run中没有我们的想要的方法,通过类适配器,访问run 的时候,访问了想要的方法
        human.run();
    }
}

跑起来了
飞起来了

通过继续鸟的实现类鸽子,人类调用了鸟飞的技能。

第二种 对象适配器

考虑一个问题,如果要使用某个对象的一个方法,那用继承类显然无法实现,这个时候使用对象适配。
在这里插入图片描述
代码如下;

public class ChineseHuman implements Human {
    private Bird bird;

    public ChineseHuman(Bird bird) {
        this.bird = bird;
    }

    @Override
    public void run() {
        System.out.println("跑起来了");
        bird.fly();
    }
}

其他的就不贴出来,只有这个不同,通过构造对象的时候,传入被适配对象,然后用调用被适配对象的方法,本例中是 bird.fly();
测试:

public class Test {
    public static void main(String[] args) {
        Human human = new ChineseHuman(new Pigeon()); // run中没有我们的想要的方法,通过类适配器,访问run 的时候,访问了想要的方法
        human.run();
    }
}

跑起来了
飞起来了

第三种 接口适配器

如果一种接口有很多方法,我们的实现类不想实现这么多,就用到了接口适配

接口
public interface Bird {
    /**
     * 飞
     */
    public void fly();

    /**
     * 吃虫子
     */
    public void eatWorm();

    /**
     * 下蛋
     */
    public void createEgg();
}
抽象类实现接口
public abstract class BigBird implements Bird {
    @Override
    public void fly() {
    }

    @Override
    public void eatWorm() {
    }

    @Override
    public void createEgg() {
    }
}
具体实现类
public class Pigeon extends BigBird {
    @Override
    public void fly() {
        super.fly();
        System.out.println("飞起来了");
    }
}

这是我们需要的类,实现一个方法就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值