在面向对象范式中,有人能准确地描述松耦合和紧耦合之间的区别吗?
当前回答
我的理解是,与松散耦合的体系结构相比,紧密耦合的体系结构并没有为更改提供很多灵活性。
但是对于松散耦合的体系结构,消息格式或操作平台或修改业务逻辑不会影响另一端。如果系统因改造而关闭,当然另一端在一段时间内不能访问服务,但除此之外,未更改的一端可以恢复消息交换,就像改造之前一样。
其他回答
这是关于类对其他类的依赖率,在松散耦合时很低,而在紧密耦合时很高。在面向服务的体系结构中,服务之间是松散耦合的,不同的类之间的依赖是有意的
松耦合意味着两个组件之间的依赖程度非常低。 示例:GSM SIM卡
紧密耦合意味着两个组件之间的依赖程度非常高。 例如:CDMA移动通信
如果一个对象的创建/存在依赖于另一个不能被剪裁的对象,它的紧密耦合。如果依赖关系可以被裁剪,那么它的松散耦合。考虑Java中的一个例子:
class Car {
private Engine engine = new Engine( "X_COMPANY" ); // this car is being created with "X_COMPANY" engine
// Other parts
public Car() {
// implemenation
}
}
Car类的客户端只能创建一个“X_COMPANY”引擎。
考虑打破这种耦合的能力来改变它:
class Car {
private Engine engine;
// Other members
public Car( Engine engine ) { // this car can be created with any Engine type
this.engine = engine;
}
}
现在,Car不依赖于“X_COMPANY”的引擎,因为它可以用类型创建。
Java特有的注意事项:仅仅为了解耦合而使用Java接口并不是一种合适的设计方法。在Java中,接口有一个目的——充当契约,从本质上提供解耦合行为/优势。
Bill Rosmus在公认答案中的评论有一个很好的解释。
有一些工具通过它们的库提供依赖注入,例如在。net中我们有ninject库。
如果在java中更进一步,那么spring提供了这种功能。
松散耦合的对象可以通过在代码中引入接口来实现,这就是这些源代码所做的。
在你正在编写的代码中
Myclass m = new Myclass();
现在你的方法中的这个语句说你依赖于myclass这被称为紧耦合。现在你提供了一些构造函数注入,或者属性注入实例化对象,然后它就会变得松散耦合。
当两个对象松散耦合时,它们可以相互作用,但知之甚少 对方。
松散耦合设计允许我们构建能够处理变更的灵活的OO系统。
观察者设计模式是一个让类松散耦合的好例子,你可以在维基百科上看到它。
推荐文章
- 在JavaScript中根据键值查找和删除数组中的对象
- 在Java中使用“final”修饰符
- 我怎么知道什么时候创建一个接口?
- 在JSON键名中哪些字符是有效的/无效的?
- 构造函数vs工厂方法
- 在PHP5中创建单例设计模式
- 如何正确地设置和拆除带有测试的pytest类?
- 什么是依赖倒置原则?为什么它很重要?
- 访问对象内存地址
- 为什么在Python方法中需要显式地有“self”参数?
- 如何在方法中访问“静态”类变量?
- 使arrayList.toArray()返回更具体的类型
- 如何从对象数组中通过对象属性找到条目?
- 为什么c#不提供c++风格的'friend'关键字?
- new Object()和对象文字表示法的区别是什么?