解决类耦合的方案

解决类耦合的方案
2011年04月16日
  问题提出:
  由于在创建一个类时没有使用 接口模式 导致一个类实现的功能不够单一,往往包含一组或多组功能。这个时候就可能会出现类的相互嵌套的问题,如:
  ///send(chMsg);
      }
  protected:
      A*  m_pA
  }
  这个时候就需要解耦了,在上面的例子中根本问题在于class A对于class B来说功能不够单一(当然从更大范围将,它绝对是满足功能单一的条件)。所以也要从这方面入手了
  方案一: 建立接口类
  ///send(chMsg);
      }
  protected:
      A_Send*  m_pA
  }
  优点: 最简单的解决了耦合的关系,并制定了标准
  缺点: 一旦发生些变化所有依赖于标准的类需要全部改变
  适用范围: 很稳定的接口
  方案二: 函数指针
  ///send(chMsg);
      }
      void send(const char* cMsg)
      {
          ///耦合,灵巧方便
  缺点: 不能良好的体现出属于同种类型的多个方法间的关系,照成一旦添加一个函数就需要定义一种函数指针的不便
  适用范围: 函数数量比较少,函数形参变化比较小,函数间的关系依赖不大
  方案三: 使用模板加包装器
  ///    m_Pack;
      B     m_B;
  }
  ///
  class pack
  {
  public:
      pack(T* pParent)
      {
          m_pParent = pParent;
      }
      void send(const char* chMsg)
      {
          m_pPareant->send(chMsg);
      }
  protected:
      T*    m_pParent;
  }
  ///
  class B
  {
  public:
      B (Pack* pPack)
      {
         m_pPack = pPack;
      }
      void send(const char* chMsg)
      {
          m_pPack ->send(chMsg);
      }
  protected:
      Pack*    m_pPack;
  }
  优点: 完全解除了耦合;能够将不同种类的方法组织成不同的类;不依赖于原始类
  缺点: 依赖于模板技术,在linux上分成头文件和源文件不方便
  适用范围: 需要将一个类分成多种情况,并且每种都有多个方法,这时可以选择这种方案
  方案四: 包装器
  ///send(chMsg);
      }
  protected:
      void*    m_pParent;
  }
  ///send(chMsg);
  }
  ///send(chMsg);
      }
  protected:
      Pack*    m_pPack;
  }
  优点:能够满足低要求的解耦,适用简单
  缺点: 不能做到完全解耦
  适用范围: 对类的关系相互依赖性很强的情况下可以使用,因为这个时候 包装器 其实就是针对指定父类的包装,不存在对其它类的适配
  综上所述,出现耦合的根本原因是因为类的划分在某个层次不在是单一的功能,所以解决耦合的根据解决办法还是能够良好的划分类,当然在必须要用一个类来体现的情况下应当使用接口标准、并继承接口的办法实现。其次是对具备多个功能的类应当有一个合适的包装器,在方法比较少的情况下可以使用函数指针
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值