• 耦合度定义

耦合度(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. CentOS Linux 系统 安装oracle 11g

    CentOS Linux 系统 安装oracle 11g 在Linux系统上安装oracle是比较麻烦,需要配置各种变量啥的,o(︶︿︶)o ,但是没办法,有些东西你总的去接触,而且接触理解的越早越深 ...

  2. PAT (Basic Level) Practise (中文)-1021. 个位数统计 (15)

    1021. 个位数统计 (15) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一个k位整数N = dk-1 ...

  3. 纯CSS实现垂直居中的7种方法

    今天申请博客通过了,给大家讲讲我所看到过的纯css实现垂直居中的各种方法.为什么要把它作为第一篇文章呢?因为这是我刚开始接触前端学到的对我最有用的知识,希望大家也可以从中获益! 在CSS中实现水平居中 ...

  4. 【有意思的BUG】后端多处数据校验 前端数据校验

    软件(尚处在开发阶段的软件)会犯许多低级的错误,这些错误以你在生活中的经验而言简直莫名其妙.往往你认为这个小功能怎么可能有BUG呢,是的,你猜对了!! 拿1个简单的结构举例:后端页面[1]+后端页面[ ...

  5. C#使用Xamarin开发可移植移动应用(3.进阶篇MVVM双向绑定和命令绑定)附源码

    前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 嗯..前面 ...

  6. Android WebView 调试方法

    调试Android WebView中的h5页面,通常就是通过alert和抓包工具来定位问题,效率低且无法直接调试样式或打断点,可谓是事倍功半.本文介绍一下我在项目中使用的新方法,能够通过chrome的 ...

  7. Vue组件实例间的直接访问

    前面的话 有时候需要父组件访问子组件,子组件访问父组件,或者是子组件访问根组件. 在组件实例中,Vue提供了相应的属性,包括$parent.$children.$refs和$root,这些属性都挂载在 ...

  8. FastJson将json解析成含有泛型对象,内部泛型对象再次解析出错的解决办法(Android)

    折腾小半天的问题,这里先感谢一下深圳的小伙子,远程帮我搞,虽然也没有搞出来==========FUCK 声明:Android开发下发生此异常,Java开发下并不会有这个问题 异常重现 简单说一下抛出异 ...

  9. Python 写网络爬虫思路分析

    首先从程序入口开始分析,在程序入口处传入一个待爬取的网址, 使用下载器Html_downloader类下载该地址的内容,使用解释器 parser分析内容,利用BeautifulSoup包抓取想要爬取的 ...

  10. Orleans简单配置

    Orleans简单配置 这是Orleans系列文章中的一篇.首篇文章在此 话说曾几何时,我第一次看到xml文件,心中闪过一念想:"这<>是什么鬼?"-用ini或者jso ...