当前位置: 首页 > 知识库问答 >
问题:

Java界面松耦合的优点?

章青青
2023-03-14

有人能帮我吗,我读了一些Java紧耦合和松耦合的文章。我看了好几段YouTube视频和文章,对松散耦合有一定的怀疑,但仍然无法理解某些要点。我会解释我所理解的和让我困惑的。

在松散耦合中,我们限制类之间的直接耦合。但在紧密耦合中,我们注定要去上课。让我们举个例子。我有一个主类和另一个名为Apple的不同类。我在Main类中创建了这个类的一个实例

Apple apple =new Apple();
//Apple is tightly coupled to Main class

apple.eat();

//If eat method signature is Changed to drink in the Apple class of course we need to change the method name here in Main class also right?.

让我们看看松耦合

class interface Fruits{
    void drink();
}
    
Class Apple implements Fruits {
    @Override
    public void drink (){
        // Printing some message;
    }
}
    
class Main{
    public static void main(String [] args){
        Fruits apple = new Apple ();
        //is this loose coupled 
        apple.drink();
    }
}

如果我将松散耦合中的方法签名从“喝”更改为“倒”,我需要在三个不同的地方更改代码。

  1. 水果界面内的方法签名(饮料倒出)

这里使用松耦合有什么意义?在紧密耦合中,一旦修改了耦合类(Apple),我就不得不更新主类。在松耦合中,我也在做同样的过程。使用它有什么意义?

例如,通过松耦合,我能感觉到的唯一好处就是接口引用类型

紧耦合代码

class Main {
    //boiler plate code
    
    Apple apple = new Apple();
}

将来如果我创建Mango类,我需要在主类中创建另一个对象,比如Mango-Mango=new Mango()

松耦合代码

class Main {
    //boiler plate code
    Fruits apple =new Apple():
    //In future if i Change Apple() to Mango() no error will occur here because of the interface reference type(Fruits). 
}

接口中的代码可扩展性是什么?如果我引入一个新的方法签名,所有依赖项都会被破坏,并迫使我们实现新方法。那么,如何在不破坏现有代码的情况下安全地扩展接口呢

请帮我理解这个水果类比。


共有1个答案

缑修齐
2023-03-14

首先,你应该检查这两个原则接口隔离原则和依赖倒置原则。这取决于你的问题。

让我们支持你的问题。

我想如果你再创造一层,你应该明白它是什么。

让我们假设你有一个水果出版社的课程。

-紧密耦合。

class FruitPress {
  private Apple apple;

  public FruitPress(Apple fruit){
    this.apple = fruit;
  }

  public press() {
    apple.press();
  }
}

水果压榨课取决于苹果课。因此,水果出版社与苹果紧密结合。

-松耦合

class FruitPress {
  private Fruit fruit;

  public FruitPress(Fruit fruit){
    this.fruit = fruit;
  }

  public press() {
    fruit.press();
  }
}

你的水果新闻课现在是松散耦合的。

现在创建一个Main类。如果您不使用松散耦合,您必须为您的问题实现两个presser类(ApplePresser、OrangePresser)。但是现在我们有一个实现。

class Main {   
  public static void main(String [] args){ 
    FruitPress applePresser = new FruitPress(new Apple());
    FruitPress orangePresser = new FruitPress(new Orange());
  
    //doing something.
  }
}
 类似资料:
  • 在一次技术采访中,我被问及项目的凝聚力和耦合性。我详细解释了它们的定义,尽管我没有像他说的那样正确回答问题的第二部分。 “我们如何在一个项目中同时实现高度内聚和松散耦合的设计,请解释这种方法应该如何在一个整体项目中实现?” 我回答说这两个目标是矛盾的,所以我们需要找出每个项目或模块的最佳选择,但我无法提供全面的答案。 如果有人能帮我,我将不胜感激。

  • 本文向大家介绍Java中的耦合,包括了Java中的耦合的使用技巧和注意事项,需要的朋友参考一下 耦合是指另一个对象对一个对象的使用。也可以称为协作。一个对象与另一个对象之间的依赖关系可以完成一些任务,可以分为以下两种类型: 紧密耦合 -当对象创建要使用的对象时,则为紧密耦合情况。由于主要对象创建了对象本身,因此无法从外部将其更改为易于将其标记为紧密耦合的对象。 松散耦合 -当对象从外部获取要使用的

  • 假设我们有一个带有s的表示一行注释。这些笔记存储在某个地方(本地数据库、网络等),每次调用时,都会根据存储的数据绘制正确数量的s。 现在,假设用户想要删除注释,解析特定 返回到其存储实体的最佳方式是什么? 目前,我知道的唯一方法是使用< code >视图。标签,并有一些管理器将它转换成数据实体,但它看起来相当混乱。 还有其他选择吗?

  • 本文向大家介绍Python的Django框架中的URL配置与松耦合,包括了Python的Django框架中的URL配置与松耦合的使用技巧和注意事项,需要的朋友参考一下 现在是好时机来指出Django和URL配置背后的哲学: 松耦合 原则。 简单的说,松耦合是一个 重要的保证互换性的软件开发方法。 Django的URL配置就是一个很好的例子。 在Django的应用程序中,URL的定义和视图函数之间是

  • 在客户端服务器应用程序上工作,在服务器端,我有一个面向客户端的服务组件,它拦截来自客户端的所有套接字请求,扫描消息后,它通过消息总线路由到不同的服务,因此它们是松散耦合的。 类似这样: 问题是,一旦服务完成了业务逻辑,就需要将回复发送回客户端,但通过“请求处理程序服务”,因此来自所有服务的所有回复消息都通过单个服务组件,即“请求处理程序服务”,因为我没有ChannelHandleContext对象

  • 本文向大家介绍什么是耦合?相关面试题,主要包含被问及什么是耦合?时的应答技巧和注意事项,需要的朋友参考一下 组件之间依赖关系强度的度量被称为耦合。好的设计总是高内聚和低耦合的。