一.概念说明
先这样理解一个项目,一个项目是由多个子程序(完成各种功能的类)组成,而一个子程序又是由多个模块(各种方法)组成。 这样,低耦合可以理解成项目中子程序之间的联系程度较低,而高耦合则是某个子程序中模块之间的联系程度较紧密。 高内聚和低耦合 是OOP编程典型的特点,也是评价设计模式好坏的重要标准。
这里必须提到 封装和继承 的问题,封装和继承是OOP编程显著的优点,能够大量的简化程序员的工作,让程序变得简单明了。 定义这里不再赘述,且谈点封装和继承的作用所在。
封装,形象的说就是将 可以完成某些功能的程序 给封起来。这样 在使用该程序的时候就不必 在写程序之前阅读几个小时了。 只需调用 该程序留下的接口便可,大大降低了程序的复杂程度。好比 使用电视机的时候,不用打开盒子开构造,只需遥控器便可。 而接口的使用过程就是继承。 如此这般,程序的低耦合性就出来了,无论工程怎么要求,都不必改变已封装的程序,这便是低耦合的好处,否则,工程的要求一旦有小小的改变,也会使得程序要大规模改动才能解决。
二.代码示例
这里的示例内容是一个界面程序,
分析: 程序可以分成 界面部分 和 信息处理部分, 然后再将信息添加到界面上显示出来。
下面先给非低耦合性的程序(仅为示例程序,用于说明问题。程序未完整)
总共3个类: 界面类(class MainUI) 信息类(class Msg)即显示的信息 信息显示的实现类(class ShowMsg)
1.类 class MainUI
this.setTitle("显示界面");
this.setSize(200, 400);
this.setLayout(new FlowLayout());
//Tree节点对象
rootNode = new DefaultMutableTreeNode();// 数据结构 树 中的通用节点
javax.swing.tree.DefaultTreeModel tm = new javax.swing.tree.DefaultTreeModel(rootNode);
//创建界面上 Tree对象
tree = new JTree();
tree.setModel(tm);
this.add(tree);
this.setDefaultCloseOperation(3);
this.setVisible(true);
class MainUI类说明,界面类中包含有 Tree对象的创建。如果要 信息显示要另外的要求,则必须要改变此类
2.类class Msg
private int id;
private String content;
public String toString(){ return content; }
public void setId(int id){ this.id = id; }
public int getId(){ return id; }
public void setContent(String content){ this.content = content; }
class Msg说明: 对显示的信息进行定义,超简单。
3.类class ShowMsg
private DefaultMutableTreeNode treeNode;
//构造器传入 rootNode
public NetConnector(DefaultMutableTreeNode treeNode){ this.treeNode = treeNode;}
public void run(){
int t=0;
while(true){
t++;
try{
Thread.sleep(2000);
}catch(Exception ef){ ef.printStackTrace(); }
//信息模拟
Msg ms = new Msg();
ms.setId(t);
ms.setContent("第"+t+"条消息");
//创建叶节点 ,并连到跟节点上
DefaultMutableTreeNode node = new DefaultMutableTreeNode(ms);
treeNode.add(node);
//刷新界面
javax.swing.SwingUtilities.updateComponentTreeUI(MainUI.tree);
}
}
class ShowMsg说明:该类模拟了信息,并显示到界面上。注意:该程序中有一个构造器传参,如果该项目需要改变,构造器传参会大大增加程序改变的规模。该项目示例中,仅3个类,一个构造器传参,当类增多到7,8个甚至更多时,若还是这样的网型结构,那就比较悲剧了。一旦一个地方出错,会带出一连串错误。另外,如果要对项目功能进行小小的改变,那几乎所有类都要变化,规模超大。
接下来给出低耦合性的程序示例
分两个包:
第一个包(有2个类,1个接口) 提供处理信息的接口和显示信息的功能
1.接口 interface IMsgListener 自定义的接口,用于处理信息
//处理信息的方法
public void msgAction(Msg m);
interface IMsgListener 说明 :定义了一个处理信息的接口。
2.类 class Msg 信息类,同上段代码示例
3.类 class ShowMsg 信息显示的实现类
private List<IMsgListener> liListen = new ArrayList<IMsgListener>();
public void addliListen(IMsgListener IMsg){
liListen.add(IMsg);
}
public void run(){
int count=0;
while(true){
count++;
//信息模拟
Msg msg=new Msg();
msg.type=(byte)(count/3);
msg.content="这是收到的消息内容-"+count;
for(int i=0;i<liListen.size();i++){
IMsgListener im = liListen.get(i);
im.msgAction(msg);
}
try{
Thread.sleep(1000);
}catch(Exception ef){
ef.printStackTrace();
}
}
class ShowMsg说明:该类大部分与上例相似,但是这里创建了一个List,存放 信息处里的实现类(下一个包中出现)对象,这和 监听机制有些相似。
第二个包(有2个类) 实现信息的处理 和 显示界面
1类 class ImpMsgLabel extends JLabel implements IMsgListener 信息处理的实现类 继承JLabel,实现IMsgListener 接口 (此例中简化 采用JLable 不使用上例中的JTree)
//传给父类构造器
public ImpMsgLabel(String text){ super(text); }
//将信息加到JLable上
public void msgAction(Msg m) {
this.setText(m.content);
}
class ImpMsgLabel说明:实现自定义的接口,处理信息 。类似监听器的实现类,实现对信息的监听。
2类 class MainUI
public void setUI(){
this.setTitle("显示界面");
this.setSize(200, 300);
this.setLayout(new FlowLayout());
//给界面加JLable 同时实现监听
ImpMsgLabel ILable = new ImpMsgLabel("显示");
this.add(ILable);
this.setDefaultCloseOperation(3);
this.setVisible(true);
//调用线程,添加信息到界面
CommThread ct = new CommThread();
ct.addliListen(ILable);//添加队列对象,用于界面显示信息
ct.start();
}
class MainUI 说明: 用来显示界面,与前一个包的耦合程度达到最小,仅仅掉用线程,并执行,若要对程序进行改动,则不会牵连过大,各个模块自行改动便可。
总结: 以上两个代码示例的对比 突出了低耦合的优越性。低耦合的程序生存力强,禁得住折腾,而且分块简单明了。若要进行改进,明显低耦合的程序操作性更强。
分享到:
相关推荐
5. **遵循设计模式**:利用已有的设计模式(如工厂模式、单例模式等)来解决常见的设计问题,这些模式本身就是高内聚低耦合思想的体现。 ### 结论 高内聚低耦合不仅是软件设计的基本原则之一,也是提高软件质量、...
"android高内聚低耦合任务事件总线框架"是指利用事件总线(Event Bus)模式来实现应用组件间的通信,同时遵循高内聚和低耦合的原则。本文将深入探讨这个主题。 **高内聚**指的是一个类或模块中的功能紧密相关,只...
设计模式是软件设计中的重要工具,论文可能会提及一些经典的设计模式,如工厂模式、观察者模式、装饰器模式等,这些模式都是在特定场景下,为实现高内聚和低耦合提供了解决方案。例如,工厂模式可以隐藏对象创建的...
### 图解高内聚与低耦合 #### 模块的概念 模块是在软件工程中用于组织和管理代码的一种方式,其基本思想是从逻辑上将系统分解成更小、更易于管理的部分。通过这种方式,可以将复杂的系统问题拆解成一系列相对简单的...
在Android开发中,高内聚低耦合是一个重要的设计原则,它能提升代码的质量和可维护性。"(优化2)android高内聚低耦合任务事件总线框架"这个标题暗示了我们要讨论的是如何利用事件总线来优化任务处理,以实现更好的...
《学生管理系统Demo:高内聚与低耦合的实践》 在软件工程中,高内聚和低耦合是衡量系统设计质量的重要原则。本文将深入探讨如何在C#环境中,通过一个学生管理系统的示例(demo)来实现这两个概念,并分析其中的关键...
在实际开发中,高内聚低耦合原则可以指导我们如何设计和编写代码,例如,我们可以使用接口隐藏实现的细节,使用抽象类或接口来定义模块的功能,使用依赖注入来降低耦合度,使用设计模式来提高代码的可读性和可维护性...
这个框架组合常被称为SSH(Struts-Spring-Hibernate)架构,用于构建高度模块化、低耦合、高内聚的Web应用程序。 Struts 是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,主要用于处理用户请求和...
在实际开发中,我们追求低耦合高内聚的设计原则,以提高软件的可重用性、可读性和可维护性。为了实现这一目标,可以采取以下策略: 1. 减少全局变量的使用,尽量通过接口和方法进行通信。 2. 设计模块时,确保每个...
### 软件工程中的高耦合与低内聚 在软件工程领域,"高耦合、低内聚"是一个非常重要的概念。该概念强调了软件设计时各个组成部分之间的关系和交互方式。为了更好地理解这一概念,我们首先需要了解一些基本的定义。 ...
#### 高内聚和低耦合 在软件工程领域中,**高内聚**与**低耦合**是衡量系统设计质量的重要标准。高内聚指的是一个模块内部的功能高度相关,即模块内的各个部分紧密地协同工作以完成特定任务。低耦合则意味着各个...
1. 高内聚低耦合:Tomcat 中的设计模式主要体现了高内聚低耦合的原则,例如在 Server.xml 文件中,我们可以看到许多小型的组件,每个组件都有其特定的职责,这使得 Tomcat 的架构更加灵活和可扩展。 2. 松耦合高内...
按照设计模式中“高内聚、低耦合”的原则,设计出一种标图系统的整体结构,并以Prototype, Template Method, Observer, Command, Composite和Singleton六种具体模式为例,详细阐述了它们在系统功能实现过程中的应用...
《ASP.NET设计模式》内容简介:这本独特的书通过强调松散耦合、高内聚的ASPNET Web应用程序架构设计,使得人们对高质量ASP.NET应用程序结构的认识更进一步。每一章内容分别解决企业ASP.NET应用程序中的一个层,同时...
面向对象设计的原则包括开闭原则、针对接口编程原则、高内聚-低耦合原则、最少知识原则、类的单一职责原则、依赖倒置原则以及里氏代换原则。 开闭原则强调在扩展系统功能时,不应修改原有代码,提高代码的可维护性...
1.3.1 高内聚、低耦合 1.3.2 面向抽象编程 1.3.3 多用组合少用继承 1.3.4 “开-闭”原则 1.4 设计模式概述 1.4.1 什么是设计模式 1.4.2 为什么需要设计模式 1.4.3 如何正确应用设计模式 1.5 设计模式的分类 ...
GRASP模式强调了面向对象设计的原则,如信息专家、创造者、低耦合、高内聚等。而GoF设计模式则将设计模式分为创建型、结构型和行为型三大类别,提供了23种经典的设计模式。 在第2章中,我们看到了GRASP模式的具体...
设计模式是软件工程中用于解决特定问题的通用、可复用的解决方案模板,它帮助开发者构建具有高内聚、低耦合特性的软件。在.NET开发领域,设计模式同样发挥着不可替代的作用。本书旨在为对.NET设计模式感兴趣的学习者...
面向对象系统的分析和设计实际上追求的就是两点,一是高内聚(Cohesion),而是低耦合(Coupling)。这也是我们软件设计所准求的,因此无论是OO中的封装、继承、多态,还是我们的设计模式的原则和实例都是在为了这两...