多重继承与单一继承:
并不是多重继承就不好,单一继承就好。
造成这个误会的主要原因,
C++
中的多重继承方式,让可读性、可理解性变差。
其实,在现实世界中,多重继承的关系就是存在的,你可以是一个父亲,同时也可以是一个老师。
造成我们一直对单一继承有好感的原因,是因为
C#
和
Java
都是单一继承。
但是,在
C#
和
Java
中,只是使用了接口,来实现了“多重继承”的目标,并且提高了可读性。
但是一个语言,本身就支持多重继承,且可读性也很好,你是不是觉得不错?
没错,很多动态语言使用
Mixin
的方式来支持多重继承。
抽象、继承、多态
抽象和继承,不是为了对现实世界的事物进行分类,尽管看上去很像。
抽象和继承,是为了复用,为了
DRY
。
在代码中,很多本应该是一个类,被拆分成
2,3
多个类的情况很多。
为什么呢?因为
DRY
。
那按照什么来拆分类呢?
就是角色、职责、协作,
DRY
原则,单一职责原则,封装变化原则
角色、职责、协作
在所有设计模式中,
90%
都是根据角色、职责、
DRY
得出来的。
当一个类中,职责过多,或者变化太多,就要抽离(抽象分离)出来
设计模式中,
所有
行为模式
,都是由于某种行为类职责会常变化,或因为多种原因会使其某部分职责变化。
然后就
把该部分职责,抽离出来,并以该职责的名字命名这种模式。
例如:
命令模式,是把命令职责抽离出来
状态模式,是把状态变化职责抽离出来
构建模式,是把构建过程职责抽离出来
如果你仔细研究创建模式、行为模式、结构模式,
都是把相应的创建职责、行为职责、结构相关的职责抽离出来的。
分享到:
相关推荐
内容面向对象的数据库设计对象关系模型实体对象关系模型应用总结下载参考资料简介: 面向对象(OO)和三范式(3NF)都是成熟的设计方法,本文基于面向对象设计思想和三范式数据库设计方法,提出一种实体对象分层...
理解C#中的委托[翻译] 利用委托机制处理.NET中的异常 与正则表达式相关的几个小工具 你真的了解.NET中的String吗? .NET中的方法及其调用(一) 如何判断ArrayList,Hashtable,SortedList 这类对象是否相等 帮助解决...
32.14 作为概念的角色与关联中的角色 32.15 导出元素 32.16 受限关联 32.17 自反关联 32.18 使用包来组织领域模型 32.19 示例:Monopoly领域模型的精化 第33章 架构分析 33.1 过程:何时开始架构分析 33.2 ...
32.14 作为概念的角色与关联中的角色 32.15 导出元素 32.16 受限关联 32.17 自反关联 32.18 使用包来组织领域模型 32.19 示例:Monopoly领域模型的精化 第33章 架构分析 33.1 过程:何时开始架构分析 33.2 ...
32.14 作为概念的角色与关联中的角色 32.15 导出元素 32.16 受限关联 32.17 自反关联 32.18 使用包来组织领域模型 32.19 示例:Monopoly领域模型的精化 第33章 架构分析 33.1 过程:何时开始架构分析 33.2 ...
32.14 作为概念的角色与关联中的角色 32.15 导出元素 32.16 受限关联 32.17 自反关联 32.18 使用包来组织领域模型 32.19 示例:Monopoly领域模型的精化 第33章 架构分析 33.1 过程:何时开始架构分析 33.2 ...
32.14 作为概念的角色与关联中的角色 32.15 导出元素 32.16 受限关联 32.17 自反关联 32.18 使用包来组织领域模型 32.19 示例:Monopoly领域模型的精化 第33章 架构分析 33.1 过程:何时开始架构分析 33.2 ...
32.14 作为概念的角色与关联中的角色 32.15 导出元素 32.16 受限关联 32.17 自反关联 32.18 使用包来组织领域模型 32.19 示例:Monopoly领域模型的精化 第33章 架构分析 33.1 过程:何时开始架构分析 33.2 ...
32.14 作为概念的角色与关联中的角色 32.15 导出元素 32.16 受限关联 32.17 自反关联 32.18 使用包来组织领域模型 32.19 示例:Monopoly领域模型的精化 第33章 架构分析 33.1 过程:何时开始架构分析 33.2 ...
32.14 作为概念的角色与关联中的角色 32.15 导出元素 32.16 受限关联 32.17 自反关联 32.18 使用包来组织领域模型 32.19 示例:Monopoly领域模型的精化 第33章 架构分析 33.1 过程:何时开始架构分析 33.2 ...