本文共 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/