耦合和解耦的概念解析!

转载 2012年03月30日 11:08:54
耦合就是两个层之间有依赖关系?
==
同一个层也可能有依赖关系

看见有解耦的方法就是在相互依赖的两层之间加一层,可是新加的一层不是又和原来的两层有耦合关系了吗?
==
解耦的方式是让设计依赖于抽象,而不是依赖于实现,看看设计模式的原则

到底什么是耦合??
==
A明确地使用B资源

publci class A
{
         B b;
}

public class B
{

}

现在A依赖于B

interface IX
{
...
}

public class A
{
      IX i;
       public A(IX  i)
      {
              this.i = i;
      }       
}

public class B:IX
{

}

调用的时候,我可以决定用哪个实现接口的类,甚至可以是从配置文件反射生成

A  a = new A(new B());
也可能因为某个条件
A  a = new A(new C());

这样 A依赖的是抽象的接口IX,而不是具体的类B或者C

追问

恕小弟愚昧,弱弱的问下,这里所说的“依赖抽象的接口不依赖现实”,是不是说不管类B,类C编译的版本怎么变,但始终可以调用接口来调用类B,类C,所以类A不用编译了?
 

回答

1. 如果B发生了修改,那我们可以使用C,因为我们依赖的是接口,而不是具体的类(对象) 
打个比方,汽车制造者可以依赖于轮胎这个抽象的东西,但不能依赖于具体的品牌比如"风神轮胎"

2. 当需求改变的时候,我们需要修改的只有Main函数所在的类(甚至它都可能不用修改,只需要修改配置文件就可以)。
重新编译程序的代价很大,打个比方,windows有更新了,只是提供补丁,而不是给一版新的windows吧

软件设计程序的基本思想是,当需求改变的时候,我们的应用程序改变最小

servlet API 解耦访问和耦合访问的区别

一.与Servlet API解耦的访问方式 1.为了避免与Servlet API耦合在一起,方便Action类做单元测试,   Struts2对HttpServletRequest、HttpSes...
  • java122java
  • java122java
  • 2016年11月05日 10:24
  • 1357

java 完全解耦和弱耦合

//完全解耦是尽最大程度降低类与类之间的耦合度,使程序具有很好的扩展性,便于修改 //耦合:类和类、模块和模块之间存在依赖关系,如果修改了某个实现就需要改一堆已经编写好的代码,这就是代码耦合度较高。/...
  • bailuweishuang520
  • bailuweishuang520
  • 2016年05月07日 22:19
  • 852

用java观察者模式解耦经典三层架构

三层架构是一个非常经典的架构模式,根据系统的职责不同,将系统分成了表现层,逻辑层和数据访问层,并且配合数据实体进行数据传输,可以大大的封装性和复用性。 经典的三层架构图: 我们...
  • huangkun125
  • huangkun125
  • 2016年03月17日 14:33
  • 964

Struts中解耦与耦合

1.解耦方式获得request,session.appliction /*Map reqeust=(Map)ActionContext.getContext().get("request"); ...
  • Keepsmileq
  • Keepsmileq
  • 2017年04月13日 20:48
  • 334

解耦的概念、spring实现解耦的概述

http://tieba.baidu.com/p/32141613901. IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作...
  • Mr_Gent
  • Mr_Gent
  • 2017年01月22日 09:14
  • 1744

java的接口解耦

我只想把抽象的东西说的具体,或者说,听起来简单些,明白些。。。        学过java的人都知道,java是单继承的,也就是说一个class只能继承一个类。        例如我们想制作一...
  • iamkila
  • iamkila
  • 2012年02月14日 11:04
  • 9224

用java观察者模式解耦经典三层架构

三层架构是一个非常经典的架构模式,根据系统的职责不同,将系统分成了表现层,逻辑层和数据访问层,并且配合数据实体进行数据传输,可以大大的封装性和复用性。 经典的三层架构图: 我们再深入到架构...
  • xqf309
  • xqf309
  • 2014年07月28日 15:05
  • 11715

Java 通过工厂模式和接口泛型实现完全解耦

首先我们假设: 有一个农民(farmer) 有一本菜谱(cookbook),为了方便理解菜谱只有炸鸡这一个菜 假设这是程序的两部分,分别可以被单独复用.并且农民被复用时有时需要菜谱上的函数做饭,有时忙...
  • lmw21848
  • lmw21848
  • 2017年02月03日 19:22
  • 1394

java多聚合,少继承,低耦合,高内聚

面向对象的基本原则:多聚合,少继承。低耦合,高内聚. 【高内聚、低耦合】内聚:每个模块尽可能独立完成自己的功能,不依赖于模块外部的代码。耦合:模块与模块之间接口的复杂程度,模块之间联系越复杂耦合度越...
  • u010652906
  • u010652906
  • 2016年08月08日 01:10
  • 1821

关于JAVA 封装性 以及高内聚,低耦合的理解

1.封装性   封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含两个含义:   ◇ 把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象)。 ...
  • Zhangxichao100
  • Zhangxichao100
  • 2016年04月30日 16:55
  • 3087
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:耦合和解耦的概念解析!
举报原因:
原因补充:

(最多只允许输入30个字)