• 耦合度定义

耦合度(Coupling)是对模块间关联程度的度量。耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。

模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差。

降低模块间的耦合度能减少模块间的影响,防止对某一模块修改所引起的“牵一发动全身”的水波效应,保证系统设计顺利进行。

  • 降低耦合度意义

在初学的简单程序的编写中,高耦合度往往不被重视。类之间的变量传递按需求进行。但是当程序的规模变大,需求增多,高耦合度的程序不易作出修改,类之间的逻辑以及调用关系不明朗。降低耦合度就成了必要之举。

  • 降低耦合度的方法

    1.类监听器设计

    若要实现更新UI中组件的信息,我们常常这样做。







    但是一旦UI中的组件进行了修改,就会导致一连串调用了该组件的类无法使用,需要对其作出修改。两个类相互都有关联,这就是高耦合度,不利于程序进行修改完善。



    类监听器的设计方法可以实现界面以及接收器的分离。其基本流程如下。







    此方法可以实现界面以及接收器的分离,当改动接收器或者界面的时候,只需要改动部分代码。而且接收器可以同时分发给多个监听器,同样界面也可以加多个监听器,相较于之前的代码更加灵活。

  • 示例代码

    1.类监听器设计

MListener.java

public interface MListener {
public void reciveMsg(String s);
}

MJTextArea.java

import javax.swing.JTextArea;

public class MJTextArea extends JTextArea
implements MListener{
private static final long serialVersionUID = 1L;
public void reciveMsg(String s) {
String msg = this.getText();
msg += s;
this.setText(msg);
}
}

NetConnector.java

import java.util.ArrayList;
import java.util.List; public class NetConnector extends Thread{
private List<MListener> listeners =
new ArrayList<MListener>();
public void addListener(MListener listener){
listeners.add(listener);
}
public void fireMsgRecive(String s){
for(int i = 0 ; i < listeners.size(); i++){
listeners.get(i).reciveMsg(s);
}
} public void run(){
int i = 0;
while(true){
try {
Thread.sleep(3000);i++;
} catch (InterruptedException e) {
e.printStackTrace();
}
fireMsgRecive("Test"+i+"\n");
}
}
}

MainUI.java

import java.awt.FlowLayout;
import java.awt.Font;
import javax.swing.JFrame; public class MainUI extends JFrame{
private static final long serialVersionUID = 1L; public static void main(String[] args) {
MainUI ui = new MainUI();
NetConnector connector = new NetConnector();
connector.start();
MJTextArea text = new MJTextArea();
connector.addListener(text);
ui.setupUI(text);
} public void setupUI(MJTextArea text){
this.setTitle("Title");
FlowLayout fl = new FlowLayout();
this.setLayout(fl);
this.add(text);
text.setFont(new Font("楷体",30,30));
this.setSize(800, 800);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
}
}

Java学习记录:降低耦合度的更多相关文章

  1. Java 学习记录

    •Eclipse相关 Eclipse常用设置 解决 Eclipse 项目中有红色感叹号的详细方法(图文) JRE System Library [JavaSE-1.8](unbound) •Java ...

  2. Java学习记录第一章

    学习Java第一章的记录,这一章主要记录的是Java的最基础部分的了解知识,了解Java的特性和开发环境还有Java语言的优缺点. 计算机语言的发展大概过程:机器语言--->汇编语言---> ...

  3. Java学习记录 : 画板的实现

    接触java不满一个月,看厚厚的java入门简直要醉,故利用实例来巩固所学知识. 画板的实现其实从原理来说超级简单,可能一会儿就完成了. 但作为一名强迫症患者,要实现和win下面的画板一样的功能还是需 ...

  4. JAVA学习记录(一)————JAVA中的集合类

    这个图是总体的框架图,主要是两个接口Collection和Map都继承接口Iterator(Iterable),为了实现可以使用迭代器.Collection和Map类似平级关系. 1.这里我先学习下A ...

  5. JAVA学习记录<一>

    一: JAVA初体验: 1.JAVA简介: 2.环境搭建: 3:MyEclipse的使用简介: 4:程序的移植:项目的导入,导出. 5:学习JAVA的经验: 多写,多问,总结和复习!!!

  6. Java学习记录-Jdk包简单介绍

    java.applet Java语言编写的一些小应用程序 java.awt AWT 是Abstract Window ToolKit (抽象窗口工具包)的缩写,这个工具包提供了一套与本地图形界面进行交 ...

  7. Java学习记录-注解

    注解 一.org.springframework.web.bind.annotation ControllerAdviceCookieValue : 可以把Request header中关于cooki ...

  8. java学习记录

    1,接口(不实现任何方法)——>抽象类(实现部分公共方法)——>简单实现类——>具体实现类 2,抽象类不能被直接实例化,只能实现抽象方法,以匿名内部类的方式表现. 3,如果stati ...

  9. Java学习记录:文件的输入输出流

    Java中的输入.输出流中可以用于文件的读写,拷贝. 由于文件都是由字节组成的,可以将文件中的内容以字节的方式读取出来. 输入流还可以直接转换为图片来使用.其实ImageIcon提供了方法可以直接打开 ...

随机推荐

  1. 5. Leetcode 448. Find All Numbers Disappeared in an Array

    Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and ot ...

  2. 起床困难综合症[NOI2014]

    [题解] 并不算很困难的贪心题.位运算毕竟是针对每一位的,从前向后处理,如果某一位1比0更优且可取1就使它为1.比较0和1的结果要单取这一位来看,但是题目中所给的参数并没有必要全部二进制分解,直接用十 ...

  3. 用户体验 | 寻找成套的 App SDK 服务

    前言 对于开发者来说,三方 SDK 这个词已经是一个不需要任何解释的词语了,然而我想面对琳琅满目的 SDK 产品,大家都会纠结如何选择.那么选择一个 SDK 需要注意哪些问题呢? SDK 的 稳定易用 ...

  4. NYOJ--128--前缀式计算(表达式求值)

    前缀式计算 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上括 ...

  5. Head First 设计模式目录

    这确实是本好书啊,看其他的书,都会有种看了就忘,看着看着就会有种昏昏欲睡的感脚,然而,这本书却能让我在看了之后记住自己看了些什么. 并且在本书的开头,作者也在一个劲的告诉你如何让自己来记住自己看了什么 ...

  6. IntelliJ IDEA javaDoc的使用

    文档注释的风格看个人主要说一下在idea中如何配置和使用快捷的文档注释 1.想像Eclipse一样使用 /**来写文档注释可以通过settings下的Live Templates来设置如下图所示 ja ...

  7. gitbook初体验

    前言 在早些天看sec-wiki的时候,看到有同学做了一个ctf-wiki来介绍CTF,让CTF新手能够快速入门,做成了电子书的样子,放在github上面.页面精美.简洁,让人爱不惜手. 想着自己也能 ...

  8. NYOJ 69 数的长度(数学)

    数的长度 时间限制:3000 ms  |  内存限制:65535 KB 难度:1   描述 N!阶乘是一个非常大的数,大家都知道计算公式是N!=N*(N-1)······*2*1.现在你的任务是计算出 ...

  9. fiddler - 测试手机端软件

    在执行"Web测试"的时候,需要在PC配置HOSTS,那么当我们在执行"手机端测试"的时候需要如何配置HOSTS呢? iOS越狱后可以配置HOSTS,不过可能会引入bugs: Android使用ROO ...

  10. BYS推荐MS前端PhoneCall面试问题整理-2

    JS:1. 如何为一个已有的对象加一个新的方法,Prototype,这个不仅要知道,还要用过,写过 2. Angular和Ember比较的优势或不同点在哪里 3. null和undefined的区别, ...