[设计模式] 耦合和解耦的概念解析

耦合就是两个层之间有依赖关系?
==
同一个层也可能有依赖关系

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

到底什么是耦合??
==
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吧

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

时间: 2024-10-29 04:38:37

[设计模式] 耦合和解耦的概念解析的相关文章

mongodb基本概念解析

MongoDB 概念解析 不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档.集合.数据库,下面我们挨个介绍. 下表将帮助您更容易理解Mongo中的一些概念: SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table collection 数据库表/集合 row document 数据记录行/文档 column field 数据字段/域 index index 索引 table joins   表连接,Mong

耦合和解耦--工厂单例解耦

一.耦合和解耦        耦合:             ◇ 所谓的耦合指的是在软件开发中,在层与层之间产生了某种紧密的关系,这种关系可能会导致,在我们修改或者是替换某一层时会影响其他的层,像这种情况我们就称之为层与层之间产生了耦合.            ◇ 由于耦合(层与层之间的紧密关系)可能会导致我们在修改某一层时影响到其他的层,而这严重违反了我们对软件进行分层的最初设想 -- 软件各层之间应该相互独立.互不干扰,在修改或者是替换某一层时,应该做到不 影响其他层. 解耦:      

MongoDB 概念解析

MongoDB 概念解析 不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档.集合.数据库,下面我们挨个介绍. 下表将帮助您更容易理解Mongo中的一些概念: SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table collection 数据库表/集合 row document 数据记录行/文档 column field 数据字段/域 index index 索引 table joins   表连接,Mong

Photoshop入门教程(一):文本新建与概念解析

写在开头 <Photoshop实用入门>系列教程可能对于一点都没有接触过Photoshop的人来说不太容易接受,因为本教程并没有细致到教你如何使用画笔工具等一系列很基础的东西,有些地方的讲解可能还会有一点点跨越.所以建议会基本操作的初学者学习,通过对本教程的学习,真正步入Photoshop奇妙的世界,真正入门. Photoshop简介 Photoshop是大名鼎鼎的图像处理软件,是由Adobe开发的,主要处理以像素所构成的数字图像. Photoshop版本 作为初学者,第一要面临的就是软件版本

SQL Server扩展事件(Extended Events)-- 扩展事件概念解析

SQL Server扩展事件(Extended Events)-- 扩展事件概念解析 下图描述了扩展事件中引入的几个新概念: 事件 事件是指代码中定义的点.此类示例包括:T-SQL 语句完成执行时的点或结束获取锁定时的点.每个事件都有一个定义的负载(该事件返回的列的集合),它是使用 ETW 模型(其中每个事件都返回一个通道和关键字作为负载的一部分)来定义的,以便能够与 ETW 集成.SQL Server 2008 最初提供 254 个定义的事件,预计在今后还会增加. 使用下列代码可以查看这些定义

New UI-屏幕分辨率,屏幕尺寸,像素,dpi概念解析

屏幕分辨率,屏幕尺寸,像素,dpi概念解析            --转载请注明出处:coder-pig,欢迎转载,请勿用于商业用途! 小猪Android开发交流群已建立,欢迎大家加入,无论是新手,菜鸟,大神都可以,小猪一个人的 力量毕竟是有限的,写出来的东西肯定会有很多纰漏不足,欢迎大家指出,集思广益,让小猪的博文 更加的详尽,帮到更多的人,O(∩_∩)O谢谢! 小猪Android开发交流群:小猪Android开发交流群群号:421858269 新Android UI实例大全目录:http:/

依赖耦合、解耦、控制反转(IOC)、依赖注入

随着net的深入学习,出现了很多概念性的东西需要理解,现在统一记录一下. 1.依赖:现阶段在任何一个有请求作用的系统,都会出现A类调用B类的情况,这时候A类就依赖于B类,A类和B类存在依赖关系. 2.耦合.解耦:A类依赖于B类,这时对B类调用,一般通过A a=new B();的形式,不过这个时候如果B类重构(例如:增加了一个参数param1),要保证A类的正确使用,则必须重新new:A a=new B(param1); 则此时A类和B类就是耦合关系.不过带来了很多的不方便之处,如果B类频繁变动,

Android实习札记(4)---Fragment(碎片)基本概念解析

Android实习札记(4)---Fragment(碎片)基本概念解析 转载请注明出处:coder-pig Fragment相信大家都不会陌生吧,侧滑啦,抽屉效果啦,DialogFragment啊等等,一堆地方都会 用到Fragment,对于Fragment的基本概念在前面的文章中其实已经给出的了,这里回顾一遍, 温故而知新嘛,同时结合Google官方的api进行复习! 1)什么是Fragment以及它的生命周期: 核心要点: 1)3.0版本后引入,即minSdk要大于11 2)Fragment

Apache Flink 零基础入门(一):基础概念解析

作者:陈守元.戴资力 一.Apache Flink 的定义.架构及原理 Apache Flink 是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态或无状态的计算,能够部署在各种集群环境,对各种规模大小的数据进行快速计算. 1. Flink Application 了解 Flink 应用开发需要先理解 Flink 的 Streams.State.Time 等基础处理语义以及 Flink 兼顾灵活性和方便性的多层次 API. Streams:流,分为有限数据流与无限数据流,unbou