• 耦合度定义

耦合度(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. Lettuce_webdriver 自动化测试

    这篇文章主要讲解以下几点: 1. Lettuce_webdriver环境搭建 2. lettuce_webdriver自动化实例讲解 一. lettuce_webdriver环境搭建 搭建lettuc ...

  2. 安徽省2016“京胜杯”程序设计大赛_E_转啊转

    转啊转 Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 59 Accepted: 15 Description     在二 ...

  3. vue模板的几种写法及变化

    第一种: 2+版本支持,1+版本支持 <script> <template id="aaa"> <h1>我是组件2</h1> < ...

  4. web项目中图标的前端处理方案

    工程中用到图标是常事,那这些图标我们前端一般是怎么解决的呢?这几种方案有什么优缺点呢? 第一种: SVG Sprite SVG sprite其实就是svg的集合.SVG即可缩放矢量图形 (Scalab ...

  5. Linux删除其他程序正在使用的文件

    今天在逛论坛时发现网友提的一个问题: 今天做实验发现,当前活动日志丢失后,数据库居然还可以正常写数据,还可以正常提交,如果是ORACLE,这个时候数据库已经崩溃了,很奇怪DB2这个时候把事务写到哪儿去 ...

  6. RabbitMQ --- Publish/Subscribe(发布/订阅)

    目录 RabbitMQ --- Hello Mr.Tua RabbitMQ --- Work Queues(工作队列) 前言 在第二篇文章中介绍了 Work Queues(工作队列),它适用于把一个消 ...

  7. 【每天一道算法题】Numeric Keypad

    题目描述 The numberic keypad on your mobile phone looks like below: 123 456 789  0  suppose you are hold ...

  8. XP和win7的软件崩溃提示

    运行在XP上的应用软件崩溃时总提示:应用程序错误,xxxxx地址不能写... 现在win7上提示的就只有关闭和调试程序,没有这些详细信息.其实win7下面也记录了相关的信息. 位置在:“控制面板” - ...

  9. jsp 的四个作用域 :page、request、session和application的区别 (转)

    1.简单说 page指当前页面.在一个jsp页面里有效 2.request 指从http请求到服务器处理结束,返回响应的整个过程.在这个过程中使用forward方式跳转多个jsp.在这些页面里你都可以 ...

  10. 《CS:APP》二进制炸弹实验(phase_1-3)

    <深入理解计算机系统>第三章的bomb lab,拆弹实验:给出一个linux的可执行文件bomb,执行后文件要求分别进行6次输入,每一次输入错误都会导致炸弹爆炸,程序终止.需要通过反汇编来 ...