`
lindingyu
  • 浏览: 29055 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
文章分类
社区版块
存档分类
最新评论

设计模式 之 高内聚低耦合

阅读更多

 一.概念说明  

   先这样理解一个项目,一个项目是由多个子程序(完成各种功能的类)组成,而一个子程序又是由多个模块(各种方法)组成。 这样,低耦合可以理解成项目中子程序之间的联系程度较低,而高耦合则是某个子程序中模块之间的联系程度较紧密。     高内聚和低耦合 是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高内聚低耦合任务事件总线框架

    "android高内聚低耦合任务事件总线框架"是指利用事件总线(Event Bus)模式来实现应用组件间的通信,同时遵循高内聚和低耦合的原则。本文将深入探讨这个主题。 **高内聚**指的是一个类或模块中的功能紧密相关,只...

    论文:高内聚低耦合软件架构的构建_程春蕊

    设计模式是软件设计中的重要工具,论文可能会提及一些经典的设计模式,如工厂模式、观察者模式、装饰器模式等,这些模式都是在特定场景下,为实现高内聚和低耦合提供了解决方案。例如,工厂模式可以隐藏对象创建的...

    图解高内聚与低耦合.docx

    ### 图解高内聚与低耦合 #### 模块的概念 模块是在软件工程中用于组织和管理代码的一种方式,其基本思想是从逻辑上将系统分解成更小、更易于管理的部分。通过这种方式,可以将复杂的系统问题拆解成一系列相对简单的...

    (优化2)android高内聚低耦合任务事件总线框架

    在Android开发中,高内聚低耦合是一个重要的设计原则,它能提升代码的质量和可维护性。"(优化2)android高内聚低耦合任务事件总线框架"这个标题暗示了我们要讨论的是如何利用事件总线来优化任务处理,以实现更好的...

    一个学生管理系统的demo 高内聚 低耦合

    《学生管理系统Demo:高内聚与低耦合的实践》 在软件工程中,高内聚和低耦合是衡量系统设计质量的重要原则。本文将深入探讨如何在C#环境中,通过一个学生管理系统的示例(demo)来实现这两个概念,并分析其中的关键...

    高内聚低耦合原则_动力节点Java学院整理

    在实际开发中,高内聚低耦合原则可以指导我们如何设计和编写代码,例如,我们可以使用接口隐藏实现的细节,使用抽象类或接口来定义模块的功能,使用依赖注入来降低耦合度,使用设计模式来提高代码的可读性和可维护性...

    如何在struts+spring+hibernate的框架下构建低耦合高内聚的软件

    这个框架组合常被称为SSH(Struts-Spring-Hibernate)架构,用于构建高度模块化、低耦合、高内聚的Web应用程序。 Struts 是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,主要用于处理用户请求和...

    耦合内聚.zip

    在实际开发中,我们追求低耦合高内聚的设计原则,以提高软件的可重用性、可读性和可维护性。为了实现这一目标,可以采取以下策略: 1. 减少全局变量的使用,尽量通过接口和方法进行通信。 2. 设计模块时,确保每个...

    软件工程_高耦和、低内聚

    ### 软件工程中的高耦合与低内聚 在软件工程领域,"高耦合、低内聚"是一个非常重要的概念。该概念强调了软件设计时各个组成部分之间的关系和交互方式。为了更好地理解这一概念,我们首先需要了解一些基本的定义。 ...

    耦合和单例模式的理解

    #### 高内聚和低耦合 在软件工程领域中,**高内聚**与**低耦合**是衡量系统设计质量的重要标准。高内聚指的是一个模块内部的功能高度相关,即模块内的各个部分紧密地协同工作以完成特定任务。低耦合则意味着各个...

    Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析1

    1. 高内聚低耦合:Tomcat 中的设计模式主要体现了高内聚低耦合的原则,例如在 Server.xml 文件中,我们可以看到许多小型的组件,每个组件都有其特定的职责,这使得 Tomcat 的架构更加灵活和可扩展。 2. 松耦合高内...

    论文研究-设计模式在标图系统中的综合应用.pdf

    按照设计模式中“高内聚、低耦合”的原则,设计出一种标图系统的整体结构,并以Prototype, Template Method, Observer, Command, Composite和Singleton六种具体模式为例,详细阐述了它们在系统功能实现过程中的应用...

    ASP.NET设计模式

    《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设计模式精选.pdf

    设计模式是软件工程中用于解决特定问题的通用、可复用的解决方案模板,它帮助开发者构建具有高内聚、低耦合特性的软件。在.NET开发领域,设计模式同样发挥着不可替代的作用。本书旨在为对.NET设计模式感兴趣的学习者...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    面向对象系统的分析和设计实际上追求的就是两点,一是高内聚(Cohesion),而是低耦合(Coupling)。这也是我们软件设计所准求的,因此无论是OO中的封装、继承、多态,还是我们的设计模式的原则和实例都是在为了这两...

Global site tag (gtag.js) - Google Analytics