首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么类适配器设计模式不能使用一个接口而不是多个继承?

为什么类适配器设计模式不能使用一个接口而不是多个继承?
EN

Stack Overflow用户
提问于 2022-09-16 18:22:10
回答 2查看 105关注 0票数 2

我最近学习了类适配器模式。为了实现它,所使用的语言必须支持多重继承,因为适配器类必须继承两个类,即Target和adapter。因此,在像Java这样的语言中,这是无法做到的。

但是为什么它不能使用接口目标而不是类目标呢?与对象适配器模式也有更多的内联。只需从对象组合(Adapter具有适配器)切换到单继承(Adapter继承适配器)。通过使用接口,我看不到设计上的差异,因此,这种模式可以在Java中使用。

链接到对象适配器和类适配器类关系图。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-17 15:22:46

但是为什么它不能使用接口目标而不是类目标呢?

你可以使用界面。但是,您将有重复的代码,但多重继承删除重复的代码。

让我举个例子。

我们的摘要:

代码语言:javascript
运行
复制
public interface IDuck
{
    void Quack();
}

public interface ITurkey
{
    void Gobble();
}

和具体实施:

代码语言:javascript
运行
复制
public class Duck : IDuck
{
    public void Quack()
    {
        Console.WriteLine("Quack");
    }
}

public class Turkey : ITurkey
{
    public void Gobble()
    {
        Console.WriteLine("Gobble");
    }
}

类适配器看起来如下所示:

代码语言:javascript
运行
复制
public class ClassAdapter : IDuck, ITurkey
{
    public void Gobble()
    {
        // duplication of code
        Console.WriteLine("Gobble");
    }

    public void Quack()
    {
        Gobble();
    }
}

上面的ClassAdapter有重复的代码。当然,我们可以提取这个代码,并通过合成提供它,或注入鸭子和土耳其。然而,它带来了额外的依赖性和一些复杂性。因此,最好使用对象适配器模式。你的代码会更简单。简单的代码几乎总是最好的选择。

票数 1
EN

Stack Overflow用户

发布于 2022-09-17 21:01:27

通常,您没有理由不能在Java的两个接口之间创建一个类适配器。但是首先,您必须足够幸运,在这样一个场景中,需要调整的两个API首先都是接口。

适配器对于弥合不属于您的两个现有API之间的差距非常有用。如果您控制一个或两个API,您可以简单地更改其中一个以匹配另一个API。当您需要两个独立的API来兼容时,但是API不属于您,那么您必须调整所给出的内容,这可能不是接口。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73748904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档