博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OOD沉思录3 类和对象的关系--使用关系
阅读量:5262 次
发布时间:2019-06-14

本文共 1322 字,大约阅读时间需要 4 分钟。

类和对象的关系--使用关系原则

4.1 尽量减少类的协作的数量,即减少使用者和被使用者的数量。

      协作意味着一定程度的耦合,但是完全没有协作的类也是没有意义的,最多只能作为一个库使用。
      通过抽象,依赖接口,可以最大程度减少依赖的实现类,对使用者来说,只看到接口的依赖,而具体的实现的依赖可以通后后期绑定来配置依赖关系。
      如 菜单----〉牛肉
             ----〉羊肉
             ----〉鸡肉
      可以抽象为
         菜单---->肉类<===牛肉
                      <===羊肉
                      <===鸡肉
      其中---->代表使用,<====代表实现

4.2 尽量减少类和协作者之间传递的消息的数量。
     
4.3 尽量减少类与协作者之间的协作量
      即减少类和协作者之间传递不同消息的数量。

4.4 尽量减少类的扇出。

      类的消息(方法)数 X 发送的消息(调用其它类的方法)数 = 类的扇出。

 

 

使用关系

对象A的方法MethodA使用了B的方法MethodB,则表示A对B存在使用关系

使用关系的最关键问题在于,A如何找到B,存在6种方案

方案一:

      A包含了B,B作为一个成员定义在A的类中,那么在MethodA中可以直接调用B.MethodB()
      如汽车可以包含车轮。
      但是汽车需要加油,那么就需要调用"加油站B.加油()"

      

[cpp]
  1. class 汽车  
  2. {  
  3.      加油站 m_加油站;  
  4.      加油(...)  
  5.      {  
  6.       //调用某加油站的加油方法  
  7.        m_加油站.加油();  
  8.      }  
  9. }  

      那么关键问题在于,汽车如何知道加油站X?

      如果让汽车包含加油站,肯定不合适,那么还有以下5种方案:

方案二:

      通过形参将加油站传递给调用的方法,那么调用形式就是“加油站.加油()",那么汽车的定义则如下

[cpp]
  1. class 汽车  
  2. {  
  3.      加油(加油站 X)  
  4.      {  
  5.        X.加油();  
  6.      }  
  7. }  

方案三:

      通过一个第三方类来获得加油站,如地图类,则汽车的定义如下:

     

[cpp]
  1. class 汽车  
  2. {  
  3.      加油()  
  4.      {  
  5.        加油站 X=地图.查找一个加油站();  
  6.        X.加油();  
  7.      }  
  8. }  

方案四:
      全世界只有一个加油站,那么所有的汽车都到这里来加油,则汽车的定义如下:

[cpp]
  1. class 汽车  
  2. {  
  3.      加油()  
  4.      {               
  5.        加油站.TheInstance.加油();  
  6.      }  
  7. }  

 

      这种情况就是单件模式的例子,还记得它吗?

方案五:
      对款爷来说,随时修一个加油站,加完油就推平,这种情况在大部分领域行不通(代价太高),但是在软件领域可以(因为代价很低)
      这种情况下,汽车的定义如下:

[cpp]
  1. class 汽车  
  2. {  
  3.      加油()  
  4.      {               
  5.        加油站 X=new 加油站();  
  6.        X.加油();  
  7.        delete X;  
  8.      }  
  9. }  

 

 

方案六:

      汽车制造商在汽车的玻璃上明确标注了,此车只能在名叫"XX加油站",则汽车的定义如下:

[cpp]
  1. class 汽车  
  2. {  
  3.      string 加油站名="XX加油站";  
  4.      加油()  
  5.      {               
  6.        加油站 X=企业黄页.查找(加油站名);  
  7.        X.加油();  
  8.      }  
  9. }  

      这种方案,在有的地方叫弱引用,汽车并不直接包含加油站,但是包含加油站的一个标示

转载于:https://www.cnblogs.com/xyqCreator/archive/2012/10/23/2735726.html

你可能感兴趣的文章
需求文档的建立及范例
查看>>
简明Python3教程 4.安装
查看>>
Spring3.0 入门进阶(1):从配置文件装载Bean
查看>>
Windows 7 下配置IIS,并且局域网内可访问
查看>>
三层架构介绍
查看>>
Java基于Spring配置读取properties文件
查看>>
Mybatis中的jdbcType的作用
查看>>
前端组件
查看>>
liunx中计算机壳层
查看>>
微信产品分级报价管理系统
查看>>
[C# 基础知识系列]专题七: 泛型深入理解(一)
查看>>
顶部阴影效果
查看>>
【每日Scrum】第六天冲刺
查看>>
第二次实验作业
查看>>
JavaOOP
查看>>
python 安装scikit!!!
查看>>
2-1 gradle安装
查看>>
HDOJ HDU 1171 Big Event ACM 1171 IN HDU
查看>>
Xml中SelectSingleNode方法中的xpath用法
查看>>
[python]pip 版本9.0.1升级到10.0.1故障解决办法
查看>>