我最近学习了类适配器模式.为了实现它,所使用的语言必须支持多重继承,因为适配器类必须继承两个类:Target和Adaptee.因此,在像Java这样的语言中,这是做不到的.
但是为什么它不能使用接口Target而不是类Target呢?也更符合对象适配器模式.只是从对象组合(具有适配器的Adapter)切换到单一继承(Adapter继承Adapteer). 通过使用接口,我看不到设计差异,因此,该模式可以在Java中使用.
我最近学习了类适配器模式.为了实现它,所使用的语言必须支持多重继承,因为适配器类必须继承两个类:Target和Adaptee.因此,在像Java这样的语言中,这是做不到的.
但是为什么它不能使用接口Target而不是类Target呢?也更符合对象适配器模式.只是从对象组合(具有适配器的Adapter)切换到单一继承(Adapter继承Adapteer). 通过使用接口,我看不到设计差异,因此,该模式可以在Java中使用.
但是为什么它不能使用接口Target而不是类Target呢?
您可以使用接口.但是,您将拥有重复的代码,但是多重继承消除了重复的代码.
让我举一个例子.
我们的抽象:
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
个有重复的代码.当然,我们可以提取此代码,并通过组合或注入Duck和土耳其来提供它.然而,它带来了额外的依赖关系和一些复杂性.因此,最好使用对象适配器模式.您的代码将变得更简单.简单的代码几乎总是最佳 Select .