gpt4 book ai didi

java - 接口(interface)如何打破类的依赖关系?

转载 作者:行者123 更新时间:2023-12-02 10:03:48 25 4
gpt4 key购买 nike

我正在阅读 Clean Architecture 作者:Bob Martin 。他谈到用接口(interface)打破依赖关系。例如。 B 类使用 A 类。因此,B 类依赖于 A 类 (B → A)。我们可以添加一个接口(interface),让 B 依赖于该接口(interface),同时让 A 依赖于该接口(interface)(A → I ← B)。

我不明白的是,如果类 A 具有在 B 需要的函数中使用的私有(private)成员变量,我是否必须在 B 中重写与 A 相同的代码?另外,这不是重复的代码吗?

这是一个示例。

class Car {
private String color;
private Integer numberOfTires;
[...]

public void printCar()
{
System.out.print("Color: " + color);
System.out.print("Number of tires: " + numberOfTires);
}
}

class Inventory{
private Car car;
private Truck truck; // Left out for brevity

public void printCar()
{
car.printCar();
}

public void printTruck()
{
truck.printTruck();
}
}

我不明白接口(interface)如何帮助解决这种依赖性。

最佳答案

Kaue Silveira provided一个很好的例子,但没有提到另一个重要的方面。

一般来说,接口(interface)的重点不是减少类。我想您熟悉这些术语 couplingcohesion 。您总是希望拥有松散耦合且高度内聚的代码。

意思是,你不希望类相互依赖(耦合),而是以继承的形式共享一些逻辑,polymorphism等等。这些概念是高质量面向对象设计的一些基本支柱。如果您不熟悉这些主题,那么绝对值得一读。

回到这个问题,如果您正在处理有很多特殊情况的复杂逻辑,那么您通常会遇到一些重复的情况。但是,此类问题与其他设计模式和原则更相关,这些模式和原则只是为了遵守DRY而设计的。原则并以概括解决方案的方式解决情况。

接口(interface)背后的主要思想是为类设置一个有助于对象操作统一的逻辑结构。

想象一个证券交易所系统。

这个接口(interface)有一个名为execute的方法,它将执行一些应用程序逻辑。

public interface Order{
void execute();
}

可能实现此接口(interface)的其他类可能是“Buy”和“Sell”。它看起来像这样:

public class Buy implement Order{
@Override
public void execute(){
//TODO: Some logic
}
}

现在 BuySell 都会有类似的代码,甚至可能有一些重复,但更重要的是,当它们实现相同的接口(interface)时,您可以在一个统一方式。您可以有一些 StockManager 类,它可以在某些 Queue<Order> 中同时放置买入订单和卖出订单。 。由此您可以得出结论,在使用此类队列时,您将能够调用 execute() Order 接口(interface)的任何实现上的方法。

通过使用接口(interface)和一些框架(如Spring)构建在前一个论点的基础上,您可以进行自动接线。这显着减少了对较低级别实现类的依赖,使您可以更改低级别类而不影响顶级处理程序。这种类型的应用程序设计是service-oriented architecture中的常见做法。 (SOA)。

关于java - 接口(interface)如何打破类的依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55445242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com