Java学习记录:降低耦合度

  • 耦合度定义

耦合度(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);
    }
}

转载于:https://www.cnblogs.com/he11o-liu/p/7503258.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值