[设计模式] 耦合和解耦的概念解析
2014-09-02 15:03
274 查看
耦合就是两个层之间有依赖关系?
==
同一个层也可能有依赖关系
看见有解耦的方法就是在相互依赖的两层之间加一层,可是新加的一层不是又和原来的两层有耦合关系了吗?
==
解耦的方式是让设计依赖于抽象,而不是依赖于实现,看看设计模式的原则
到底什么是耦合??
==
A明确地使用B资源
现在A依赖于B
调用的时候,我可以决定用哪个实现接口的类,甚至可以是从配置文件反射生成
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吧
软件设计程序的基本思想是,当需求改变的时候,我们的应用程序改变最小
==
同一个层也可能有依赖关系
看见有解耦的方法就是在相互依赖的两层之间加一层,可是新加的一层不是又和原来的两层有耦合关系了吗?
==
解耦的方式是让设计依赖于抽象,而不是依赖于实现,看看设计模式的原则
到底什么是耦合??
==
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吧
软件设计程序的基本思想是,当需求改变的时候,我们的应用程序改变最小
相关文章推荐
- 耦合和解耦的概念解析!
- 耦合和解耦的概念解析!
- 设计模式解析后记(k_eckel转自微软高校博客K_eckel's mindview)
- 模式是一种对现实世界的概念抽象,建筑模式,设计模式,营销模式,商业运作模式各行各业都有自己的模式。
- 常见设计模式的解析和实现(C++)之十一-TemplateMethod模式
- 常见设计模式的解析和实现(C++)之六-Adapt模式
- 常见设计模式的解析和实现(C++)之十五-Observer模式
- 常见设计模式的解析和实现(C++)之九-Decorator模式
- 常见设计模式的解析和实现(C++)之二-Abstract Factory模式
- 常见设计模式的解析和实现(C++)之十三-FlyWeight模式
- 常见设计模式的解析和实现(C++)之五-Singleton模式
- 小议解耦合--应用设计模式
- 常见设计模式的解析和实现(C++)之二十一-完结篇
- 为什么要引入模式概念来设计软件
- 常见设计模式的解析和实现(C++)之十二-ChainOfResponsibility模式
- 设计模式解析的C++实现
- 设计模式 可复用面向对象软件的基础(概念你认识多少)
- 常见设计模式的解析和实现(C++)之十九-Memento模式
- 常见设计模式的解析和实现(C++)之八-Composite模式
- 常见设计模式的解析和实现(C++)之七-Bridge模式