我最近学习了类适配器模式。为了实现它,所使用的语言必须支持多重继承,因为适配器类必须继承两个类,即Target和adapter。因此,在像Java这样的语言中,这是无法做到的。
但是为什么它不能使用接口目标而不是类目标呢?与对象适配器模式也有更多的内联。只需从对象组合(Adapter具有适配器)切换到单继承(Adapter继承适配器)。通过使用接口,我看不到设计上的差异,因此,这种模式可以在Java中使用。
发布于 2022-09-17 15:22:46
但是为什么它不能使用接口目标而不是类目标呢?
你可以使用界面。但是,您将有重复的代码,但多重继承删除重复的代码。
让我举个例子。
我们的摘要:
public interface IDuck
{
void Quack();
}
public interface ITurkey
{
void Gobble();
}和具体实施:
public class Duck : IDuck
{
public void Quack()
{
Console.WriteLine("Quack");
}
}
public class Turkey : ITurkey
{
public void Gobble()
{
Console.WriteLine("Gobble");
}
}类适配器看起来如下所示:
public class ClassAdapter : IDuck, ITurkey
{
public void Gobble()
{
// duplication of code
Console.WriteLine("Gobble");
}
public void Quack()
{
Gobble();
}
}上面的ClassAdapter有重复的代码。当然,我们可以提取这个代码,并通过合成提供它,或注入鸭子和土耳其。然而,它带来了额外的依赖性和一些复杂性。因此,最好使用对象适配器模式。你的代码会更简单。简单的代码几乎总是最好的选择。
发布于 2022-09-17 21:01:27
通常,您没有理由不能在Java的两个接口之间创建一个类适配器。但是首先,您必须足够幸运,在这样一个场景中,需要调整的两个API首先都是接口。
适配器对于弥合不属于您的两个现有API之间的差距非常有用。如果您控制一个或两个API,您可以简单地更改其中一个以匹配另一个API。当您需要两个独立的API来兼容时,但是API不属于您,那么您必须调整所给出的内容,这可能不是接口。
https://stackoverflow.com/questions/73748904
复制相似问题