uml结构图讲解(概述耦合UML)
uml结构图讲解(概述耦合UML)在之前我写 Spring依赖注入的时候【万字长文】 Spring框架层层递进轻松入门(0C和D) 就是从传统开发 讲到了如何通过工厂模式,以及多例到单例的改进,来一步步实现解耦,有兴趣的朋友可以看一下哈注:下面第二大点补充【耦合】的相关概念 若不需要跳转第三四大点【UML类图及类图间的关系】/【设计模式七大原则】还有时候,两个人同时开发一款相同的产品,均满足了预期的需求,但是 A 的程序,不仅代码健壮性强,同时后期维护扩展更是便捷(这种感觉,我们会在后面具体的设计模式中愈发的感觉到)而 B 的代码却是一言难尽啊有一句话总结的非常好:也就是说,毕竟像例如Java这样面向对象的语言中,如何实现一个可维护,可维护的代码,那必然就是要降低代码耦合度,适当复用代码,而要实现这一切,就需要充分的利用 OOP 编程的特性和思想
迷茫了一周,一段时间重复的 CRUD ,着实让我有点烦闷,最近打算将这些技术栈系列的文章先暂时搁置一下,开启一个新的篇章《设计模式》,毕竟前面写了不少 “武功招式” 的文章,也该提升一下内功了
一 设计模式概述(一) 什么是设计模式设计模式,即Design Patterns,是指在软件设计中,被反复使用的一种代码设计经验。使用设计模式的目的是为了可重用代码,提高代码的可扩展性和可维护性
1995年,GoF(Gang of Four 四人组/四人帮)合作出版了《设计模式:可复用面向对象软 件的基础》一书,收录了23种设计模式,从此树立了软件设计模式领域的里程碑,【GoF设计模式】
(二) 为什么学习设计模式前面我们学习了 N 种不同的技术,但是归根结底,也只是 CRUD 与 调用之间的堆砌,或许这个创意亦或是业务很完善、很强大,其中也巧妙运用了各种高效的算法,但是说白了,这也只是为了实现或者说解决某个问题而做的
还有时候,两个人同时开发一款相同的产品,均满足了预期的需求,但是 A 的程序,不仅代码健壮性强,同时后期维护扩展更是便捷(这种感觉,我们会在后面具体的设计模式中愈发的感觉到)而 B 的代码却是一言难尽啊
有一句话总结的非常好:
- 设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解
也就是说,毕竟像例如Java这样面向对象的语言中,如何实现一个可维护,可维护的代码,那必然就是要降低代码耦合度,适当复用代码,而要实现这一切,就需要充分的利用 OOP 编程的特性和思想
注:下面第二大点补充【耦合】的相关概念 若不需要跳转第三四大点【UML类图及类图间的关系】/【设计模式七大原则】
在之前我写 Spring依赖注入的时候【万字长文】 Spring框架层层递进轻松入门(0C和D) 就是从传统开发 讲到了如何通过工厂模式,以及多例到单例的改进,来一步步实现解耦,有兴趣的朋友可以看一下哈
【万字长文】Spring框架 层层递进轻松入门 (IOC和DI) juejin.im/post/684490…
二 什么是耦合?(高/低)作为一篇新手都能看懂的文章,开始就一堆 IOC AOP等专业名词扔出去,好像是不太礼貌,我得把需要铺垫的知识给大家尽量说一说,如果对这块比较明白的大佬,直接略过就OK了
耦合,就是模块间关联的程度,每个模块之间的联系越多,也就是其耦合性越强,那么独立性也就越差了,所以我们在软件设计中,应该尽量做到低耦合,高内聚
生活中的例子:家里有一条串灯,上面有很多灯泡,如果灯坏了,你需要将整个灯带都换掉,这就是高耦合的表现,因为灯和灯带之间是紧密相连,不可分割的,但是如果灯泡可以随意拆卸,并不影响整个灯带,那么这就叫做低耦合
代码中的例子:来看一个多态的调用,前提是 B 继承 A,引用了很多次
A a = new B();
a.method();
复制代码
如果你想要把B变成C,就需要修改所有new B() 的地方为 new C() 这也就是高耦合
如果如果使用我们今天要说的 spring框架 就可以大大的降低耦合
A a = BeanFactory().getBean(B名称);
a.method();
复制代码
这个时候,我们只需要将B名称改为C,同时将配置文件中的B改为C就可以了
常见的耦合有这些分类:
(一) 内容耦合当一个模块直接修改或操作另一个模块的数据 或者直接转入另一个模块时,就发生了内容耦合。此时,被修改的模块完全依赖于修改它的模块。 这种耦合性是很高的,最好避免
public class A {
public int numA = 1;
}
public class B {
public static A a = new A();
public static void method(){
a.numA = 1;
}
public static void main(String[] args) {
method();
System.out.println(a.numA);
}
}
复制代码