博客
关于我
linkin大话设计模式--适配器模式
阅读量:791 次
发布时间:2023-01-31

本文共 1342 字,大约阅读时间需要 4 分钟。

在Java编程中,由于类之间只能单继承,这种机制对于复杂的多功能对象设计显然存在局限性。很多实际场景都需要一种类可以继承多个超类或实现多个接口的能力,而这又带来一个问题——接口方法的全部覆盖。当我们只需要覆盖接口中的一部分方法时,直接实现接口会变得非常繁琐。这个时候,适配器模式提供了一种解决方案。

接口与抽象方法的限制

想象一下,你定义了一个接口 Eat,里面包含三个方法:eatBread()eatApple()eatBanana()。如果想实现这个接口,你必须至少提供所有方法的实现。但是如果有些方法你的类不需要使用,直接实现接口就会显得冗杂。

解决接口全部覆盖的困扰

面对这个问题,可以通过引入一个抽象类来解决。我们在接口下方层引入一个抽象类 PersonEat,让它覆盖接口中所有的方法(包括那些不需要实现的方法)。然后,具体的实现类如 MyPerson 只需要继承这个抽象类,并覆盖自己需要的方法。这样一来,类实现接口的方法就变得灵活多了。

代码示例

public class AbstractTest {    public static void main(String[] args) {        Eat p = new MyPerson();        p.eatBread(); // 输出: 我在吃面包...        p.eatApple(); // 输出: 我在吃苹果...    }}interface Eat {    void eatBread();    void eatApple();    void eatBanana();}abstract class PersonEat implements Eat {    public void eatBread() {}    public void eatApple() {}    public void eatBanana() {}}class MyPerson extends PersonEat {    public void eatBread() {        System.out.println("我在吃面包...");    }    public void eatApple() {        System.out.println("我在吃苹果...");    }}

简单的适配器模式

通过上面的代码可以看出,这其实就是一个简单的适配器模式的实现。抽象类 PersonEat**** 作为适配器,承载了接口 Eat 的全部方法定义,而具体的实现类 MyPerson 只需要覆盖自己关心的方法。

这种方法不仅简化了实现接口的过程,也让我们可以灵活地选择哪些方法去实现,哪些方法甚至可以不需要覆盖。这种设计方式在实际开发中非常常见,特别是在面对接口复杂性的问题时。

适配器模式的关键在于它允许我们将一个合作的对象(adaptee)与另一个系统上的对象(target)之间进行关系桥接,从而让两者能够协同工作。在这个例子中,抽象类 PersonEat 就相当于一个适配器,它让具体的实现类 MyPerson 能够轻松地实现 interface Eat

转载地址:http://ikwfk.baihongyu.com/

你可能感兴趣的文章
LeetCode哈希表+字符类的题目总结
查看>>
LeetCode地平线专场——第308场周赛题解
查看>>
LeetCode数据库题目汇总二(附答案)
查看>>
LeetCode新手指南:从零开始掌握算法挑战
查看>>
LeetCode智加科技专场——第207场周赛题解
查看>>
leetcode正则表达式匹配
查看>>
leetcode算法题解(Java版)-6-链表,字符串
查看>>
LeetCode经典——70.爬楼梯&&509.斐波拉契数列
查看>>
LeetCode蔚来专场——第208场周赛题解
查看>>
leetcode题解-买卖股票的最佳时机
查看>>
leetcode题解102-二叉树的层序遍历
查看>>
leetcode题解102-翻转二叉树
查看>>
leetcode题解104- 二叉树的最大深度
查看>>
leetcode题解108-将有序数组转换为二叉排序树
查看>>
leetcode题解118-杨辉三角
查看>>
leetcode题解131-分割回文串
查看>>
leetcode题解136-只出现一次的数字
查看>>
leetcode题解14-最长公共前缀
查看>>
leetcode题解151-翻转字符串里的单词
查看>>
leetcode题解153-寻找旋转排序数组的最小值
查看>>